我想搜索包含许多单词的字符串,并检索与其中任何一个匹配的文档。我的索引方法如下:
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")会精确地尝试将短语“单词列表”与短语坡度0匹配。
createPhraseQuery("termos", "list of words")
如果要匹配单词列表中的 任何 术语,可以使用createBooleanQuery:
createBooleanQuery
new QueryBuilder(analyzer).createBooleanQuery("termos", terms, BooleanClause.Occur.SHOULD);
或者,您也可以使用,createMinShouldMatchQuery()以便您可以要求查询词的数量的一小部分进行匹配,例如。至少匹配10%的条款:
createMinShouldMatchQuery()
new QueryBuilder(analyzer).createMinShouldMatchQuery("termos", terms, 0.1f));