【发布时间】:2017-11-12 06:48:25
【问题描述】:
我正在尝试使用 Lucene 实现自动完成功能。例如,如果用户键入“Lucene”,则返回的结果可能是“Lucene in Action”和“Lucene for Dummies”。
我遇到的问题是该字段应该以搜索的文本开头,它不应该在中间的某个地方;搜索“Lucene”不应返回“Enterprise Lucene”。到目前为止,这是我的代码,不排除上述内容:
StandardAnalyzer analyzer = new StandardAnalyzer();
Directory index = new RAMDirectory();
IndexWriterConfig config = new IndexWriterConfig(analyzer);
IndexWriter indexWriter = new IndexWriter(index, config);
addDocument(indexWriter, "Luceneinaction");
addDocument(indexWriter, "LuceneforDummies");
addDocument(indexWriter, "WhyisLucenesohard");
addDocument(indexWriter, "Managing Gigabytes");
addDocument(indexWriter, "The Art of Computer Science");
indexWriter.close();
Query query = new PrefixQuery(new Term("title", "lucene"));
IndexReader reader = DirectoryReader.open(index);
IndexSearcher searcher = new IndexSearcher(reader);
TopDocs docs = searcher.search(query, 10);
for (ScoreDoc scoreDoc : docs.scoreDocs) {
System.out.println(searcher.doc(scoreDoc.doc).get("title"));
}
有没有简单的方法来解决这个问题? PrefixQuery 似乎与 StringField 不兼容,我找不到不会在空格上拆分的分词器。
【问题讨论】:
标签: autocomplete lucene