Lucene 搜索匹配短语中的任何单词
Lucene search match any word at phrase
我想搜索包含很多单词的字符串,并检索与其中任何一个匹配的文档。我的索引方法如下:
Document document = new Document();
document.add(new TextField("termos", text, Field.Store.YES));
document.add(new TextField("docNumber",fileNumber,Field.Store.YES));
config = new IndexWriterConfig(analyzer);
Analyzer analyzer = CustomAnalyzer.builder()
.withTokenizer("standard")
.addTokenFilter("lowercase")
.addTokenFilter("stop")
.addTokenFilter("porterstem")
.addTokenFilter("capitalization")
.build();
config = IndexWriterConfig(analyzer);
writer = new IndexWriter(indexDirectory, config);
writer.addDocument(document);
writer.commit();
这是我的搜索方法。我不想寻找特定的短语,而是其中的任何单词。搜索分析器与索引分析器相同。
Query query = new QueryBuilder(analyzer).createPhraseQuery("termos","THE_PHRASE");
String indexDir = rootProjectFolder + "/indexDir/";
IndexReader reader = DirectoryReader.open(indexDir);
IndexSearcher searcher = new IndexSearcher(reader);
TopScoreDocCollector collector = TopScoreDocCollector.create(1000,1000);
searcher.search(query,collector);
我是 Lucene 的新手。有人可以帮助我吗?
使用 createPhraseQuery("termos", "list of words")
将精确地尝试将短语 "list of words" 与短语斜率 0 匹配。
如果你想匹配单词列表中的任何项,你可以使用createBooleanQuery
:
new QueryBuilder(analyzer).createBooleanQuery("termos", terms, BooleanClause.Occur.SHOULD);
作为替代方案,您也可以使用 createMinShouldMatchQuery()
,这样您就可以要求匹配查询字词的一小部分,例如。匹配至少 10% 的字词:
new QueryBuilder(analyzer).createMinShouldMatchQuery("termos", terms, 0.1f));
我想搜索包含很多单词的字符串,并检索与其中任何一个匹配的文档。我的索引方法如下:
Document document = new Document();
document.add(new TextField("termos", text, Field.Store.YES));
document.add(new TextField("docNumber",fileNumber,Field.Store.YES));
config = new IndexWriterConfig(analyzer);
Analyzer analyzer = CustomAnalyzer.builder()
.withTokenizer("standard")
.addTokenFilter("lowercase")
.addTokenFilter("stop")
.addTokenFilter("porterstem")
.addTokenFilter("capitalization")
.build();
config = IndexWriterConfig(analyzer);
writer = new IndexWriter(indexDirectory, config);
writer.addDocument(document);
writer.commit();
这是我的搜索方法。我不想寻找特定的短语,而是其中的任何单词。搜索分析器与索引分析器相同。
Query query = new QueryBuilder(analyzer).createPhraseQuery("termos","THE_PHRASE");
String indexDir = rootProjectFolder + "/indexDir/";
IndexReader reader = DirectoryReader.open(indexDir);
IndexSearcher searcher = new IndexSearcher(reader);
TopScoreDocCollector collector = TopScoreDocCollector.create(1000,1000);
searcher.search(query,collector);
我是 Lucene 的新手。有人可以帮助我吗?
使用 createPhraseQuery("termos", "list of words")
将精确地尝试将短语 "list of words" 与短语斜率 0 匹配。
如果你想匹配单词列表中的任何项,你可以使用createBooleanQuery
:
new QueryBuilder(analyzer).createBooleanQuery("termos", terms, BooleanClause.Occur.SHOULD);
作为替代方案,您也可以使用 createMinShouldMatchQuery()
,这样您就可以要求匹配查询字词的一小部分,例如。匹配至少 10% 的字词:
new QueryBuilder(analyzer).createMinShouldMatchQuery("termos", terms, 0.1f));