私は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-カテゴリー」を検索すると、その後、私はいくつかの検索結果を取得しています。
特殊文字 '+'、 '。'、 '!'の文字列でも同じことが起こります。など
が以下は私の検索コードである: -
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 GOLD」です。 – Raj
失敗した検索結果を表示するには 'q.toString()'の値を表示し、 'searchquery'と' isVeteran'変数の値も指定する必要があります。 –