wlu: analyzer class name in index.txt file
diff --git a/org.eclipse.epf.web.search/src/org/eclipse/epf/web/search/IndexLoader.java b/org.eclipse.epf.web.search/src/org/eclipse/epf/web/search/IndexLoader.java
index 693e5f0..05af15b 100644
--- a/org.eclipse.epf.web.search/src/org/eclipse/epf/web/search/IndexLoader.java
+++ b/org.eclipse.epf.web.search/src/org/eclipse/epf/web/search/IndexLoader.java
@@ -30,6 +30,7 @@
private static String userIndexFolderName = null;
private String userIndexPath = null;
+ private static String analyzerName;
private static Map cache = new HashMap();
protected String m_docBase;
@@ -222,6 +223,13 @@
} else {
throw new FileNotFoundException();
}
+
+ String analyzer = read.readLine();
+ if (analyzer != null) {
+ analyzer = analyzer.trim();
+ }
+ setAnalyzerName(analyzer);
+
read.close();
if (userIndexFolderName == null) {
@@ -298,6 +306,13 @@
} else {
throw new FileNotFoundException();
}
+
+ String analyzer = read.readLine();
+ if (analyzer != null) {
+ analyzer = analyzer.trim();
+ }
+ setAnalyzerName(analyzer);
+
read.close();
if (siteFolderName == null) {
@@ -324,4 +339,12 @@
public String getUserIndexPath() {
return userIndexPath;
}
+
+ public synchronized static String getAnalyzerName() {
+ return analyzerName;
+ }
+
+ private synchronized static void setAnalyzerName(String analyzerName) {
+ IndexLoader.analyzerName = analyzerName;
+ }
}
\ No newline at end of file
diff --git a/org.eclipse.epf.web.search/src/org/eclipse/epf/web/search/IndexSearch.java b/org.eclipse.epf.web.search/src/org/eclipse/epf/web/search/IndexSearch.java
index aa558d5..daebf4f 100644
--- a/org.eclipse.epf.web.search/src/org/eclipse/epf/web/search/IndexSearch.java
+++ b/org.eclipse.epf.web.search/src/org/eclipse/epf/web/search/IndexSearch.java
@@ -1,6 +1,5 @@
package org.eclipse.epf.web.search;
-import java.util.Locale;
import java.util.StringTokenizer;
import org.apache.lucene.analysis.Analyzer;
@@ -21,9 +20,16 @@
public class IndexSearch {
private static Searcher searcher;
-
+
+ /**
+ * @param indexLocation
+ * @param inputQuery
+ * @param searchField
+ * @param analyzerName: name of analyzer class
+ * @return
+ */
public static Hits search(String indexLocation, String inputQuery,
- String searchField) {
+ String searchField, String analyzerName) {
Hits hits = null;
Query q = null;
@@ -59,18 +65,17 @@
// so don't pass in any sorting criteria
Sort sort = null;
- try {
-
- boolean jako = false;
- Locale locale = Locale.getDefault();
- String lang = locale.getLanguage();
- if (lang.equals(Locale.JAPANESE.getLanguage()) ||
- lang.equals(Locale.KOREA.getLanguage())) {
- jako = true;
+ try {
+ Analyzer analyzer = null;
+ if (analyzerName != null) {
+ if (analyzerName.equals("CJKAnalyzer")) {//$NON-NLS-1$)
+ analyzer = new CJKAnalyzer();
+ }
}
- Analyzer analyzer = jako ? (Analyzer) new CJKAnalyzer() : (Analyzer) new TextAnalyzer();
-
- //System.out.println("LD>analyzer: " + analyzer);
+ if (analyzer == null) {
+ analyzer = new TextAnalyzer();
+ }
+ System.out.println("LD> analyzer: " + analyzer);
q = QueryParser.parse(queryString, searchField,
analyzer);
if ( q != null ) {
diff --git a/org.eclipse.epf.web/src/org/eclipse/epf/web/servlet/SearchServlet.java b/org.eclipse.epf.web/src/org/eclipse/epf/web/servlet/SearchServlet.java
index 54e2172..068e6a0 100644
--- a/org.eclipse.epf.web/src/org/eclipse/epf/web/servlet/SearchServlet.java
+++ b/org.eclipse.epf.web/src/org/eclipse/epf/web/servlet/SearchServlet.java
@@ -6,7 +6,7 @@
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
-import java.net.URLEncoder;
+import java.util.Locale;
import java.util.Properties;
import javax.servlet.ServletConfig;
@@ -43,6 +43,7 @@
private Hits _hits;
private int _numHits;
private int _currentPage;
+ private String analyzerName;
private HttpServletResponse _response;
@@ -79,6 +80,7 @@
try {
_siteFolderName = IndexLoader.getSiteFolderName(_pathDocumentBase);
+ analyzerName = IndexLoader.getAnalyzerName();
synchronized(session) {
String results;
@@ -105,11 +107,13 @@
}
} else {
String searchString = request.getParameter("searchString");
+ System.out.println("LD> searchString: " + searchString);
+
if (searchString == null || searchString.length() == 0) {
response.sendError(HttpServletResponse.SC_NO_CONTENT);
return;
}
- searchString = URLEncoder.encode(searchString, "UTF-8");
+ //searchString = URLEncoder.encode(searchString, "UTF-8");
String resultsPerPage = request.getParameter("hitsPerPage");
if (resultsPerPage != null && resultsPerPage.length() > 0) {
@@ -161,8 +165,21 @@
private boolean runQuery(String searchField) {
boolean result = false;
+ //_currentSearchString = "\u57FA\u672C\u539F\u5247";
try {
- _hits = IndexSearch.search(_indexPath, _currentSearchString, searchField);// new
+ System.out.println("LD> _indexPath: " + _indexPath);//$NON-NLS-1$
+ System.out.println("LD> _currentSearchString: " + _currentSearchString);//$NON-NLS-1$
+ if (_currentSearchString != null) {
+ System.out.println("LD> unicodes: " +
+ escapeUnicodeString(_currentSearchString, false));//$NON-NLS-1$
+ }
+
+ System.out.println("LD> analyzerName: " + analyzerName);//$NON-NLS-1$
+
+ _hits = IndexSearch.search(_indexPath, _currentSearchString, searchField, analyzerName);// new
+ System.out.println("LD> _hits: " +
+ (_hits == null ? "null" : Integer.toString(_hits.length())));//$NON-NLS-1$ //$NON-NLS-2$
+
// SortedHits(hits);
_numHits = _hits.length();
@@ -335,4 +352,33 @@
e.printStackTrace();
}
}
+
+ //for debug
+ private static String escapeUnicodeString(String str, boolean escapeAscii) {
+ StringBuffer ostr = new StringBuffer();
+
+ for (int i = 0; i < str.length(); i++) {
+
+ char ch = str.charAt(i);
+
+ if (!escapeAscii && ((ch >= 0x0020) && (ch <= 0x007e))) {
+ ostr.append(ch);
+ } else {
+
+ ostr.append("\\u") ; //$NON-NLS-1$
+
+ String hex = Integer.toHexString(str.charAt(i) & 0xFFFF);
+ for (int j = 0; j < 4 - hex.length(); j++)
+ ostr.append("0");//$NON-NLS-1$)
+
+ ostr.append(hex.toUpperCase(Locale.ENGLISH));
+
+ }
+
+ }
+
+ return (new String(ostr));
+
+ }
+
}
\ No newline at end of file