【发布时间】:2022-07-21 21:40:15
【问题描述】:
我正在使用 Lucene 6.6.0 版本,并且正在使用 StandardAnalyzer 为我的数据编制索引。
我正在索引以下单词数据。
- a&e 网络
- a&e
索引后,当我使用 a&e 进行搜索时,它不会返回任何结果。 这是我的示例代码。
Directory dir = new RAMDirectory();
IndexWriterConfig iwc = new IndexWriterConfig(new StandardAnalyzer());
iwc.setOpenMode(IndexWriterConfig.OpenMode.CREATE);
IndexWriter writer = new IndexWriter(dir, iwc);
Document doc = new Document();
doc.add(new TextField("text", "a&e networks", Field.Store.YES));
writer.addDocument(doc);
doc = new Document();
doc.add(new TextField("text", "a&e", Field.Store.YES));
writer.addDocument(doc);
writer.close();
IndexReader reader = DirectoryReader.open(dir);
IndexSearcher searcher = new IndexSearcher(reader);
Query query = new TermQuery(new Term("text", "a&e"));
TopDocs results = searcher.search(query, 5);
final ScoreDoc[] scoreDocs = results.scoreDocs;
for (ScoreDoc scoreDoc : scoreDocs) {
System.out.println(scoreDoc.doc + " " + scoreDoc.score + " " + searcher.doc(scoreDoc.doc).get("text"));
}
System.out.println("Hits: " + results.totalHits);
System.out.println("Max score:" + results.getMaxScore());
我得到的输出为 点击次数:0 最高分:NaN
即使我正在搜索 a,在这种情况下也没有给出任何结果。
但是如果我像这样添加设置为 StandardAnalyzer 的停用词
List<String> stopWords = Arrays.asList("&");
CharArraySet stopSet = new CharArraySet(stopWords, false);
IndexWriterConfig iwc = new IndexWriterConfig(new StandardAnalyzer(stopSet));
然后如果我搜索 a 然后我就能得到结果。但即使在这种情况下,如果我搜索 a&e ,我也没有得到任何结果。
请建议我如何实现这一点,我的目标是如果我搜索 a&e 我应该能够得到结果。我需要任何 CustomAnalyzer 吗?如果是,请说明我应该在 CustomAnalyzer 中添加什么?
【问题讨论】:
标签: java lucene special-characters