我正在使用Apache Lucene 5.5.3。我在我的代碼中使用org.apache.lucene.analysis.standard.StandardAnalyzer
並使用下面的代碼片段來創建索引。Apache Lucene 5.5.3 - 搜索以特殊字符結尾的字符串
Document doc = new Document();
doc.add(new TextField("userName", getUserName(), Field.Store.YES));
現在,如果我搜索字符串「ALL-」,那麼我沒有收到任何搜索結果,但如果我搜索字符串「ALL-分類」,然後我得到了一些搜索結果。
對於帶有特殊字符'+','。','!'的字符串也是如此。等
下面是我的搜索代碼: -
Directory directory = new RAMDirectory();
IndexReader reader = DirectoryReader.open(directory);
IndexSearcher searcher = new IndexSearcher(reader);
Document document = new Document();
document.add(new TextField("body", ALL-THE GLITTERS IS NOT GOLD, Field.Store.YES));
IndexWriter writer = new IndexWriter(directory, new IndexWriterConfig(buildAnalyzer()));
writer.addDocument(document);
writer.commit();
Builder builder = new BooleanQuery.Builder();
Query query1 = new QueryParser(IndexAttribute.USER_NAME, buildAnalyzer()).parse(searchQUery+"*");
Query query2 = new QueryParser(IndexAttribute.IS_VETERAN, buildAnalyzer()).parse(""+isVeteran);
builder.add(query1, BooleanClause.Occur.MUST);
builder.add(query2, BooleanClause.Occur.MUST);
Query q = builder.build();
TopDocs docs = searcher.search(q, 10);
ScoreDoc[] hits = docs.scoreDocs;
private static Analyzer buildAnalyzer() throws IOException {
return CustomAnalyzer.builder().withTokenizer("whitespace").addTokenFilter("lowercase")
.addTokenFilter("standard").build();
}
所以,請建議我在此。
因此,您最後在您的字符串中進行了詳細說明?什麼是索引值?也顯示您的搜索代碼。 –
是的,我最後有一個特殊的字符。我編入索引的值是'ALL-THE GLITTERS IS NOT GOLD'。 – Raj
您需要爲'q.toString()'顯示不成功的搜索結果的值,並指定變量的值 - 'searchQUery'&'isVeteran'。 –