我想搜索包含许多单词的字符串,并检索与其中任何一个匹配的文档。我的索引方法如下:
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匹配。
如果要匹配单词列表中的 任何
术语,可以使用createBooleanQuery
:
new QueryBuilder(analyzer).createBooleanQuery("termos", terms, BooleanClause.Occur.SHOULD);
或者,您也可以使用,createMinShouldMatchQuery()
以便您可以要求查询词的数量的一小部分进行匹配,例如。至少匹配10%的条款:
new QueryBuilder(analyzer).createMinShouldMatchQuery("termos", terms, 0.1f));
我在列表中有这样的数据: 我当前的解决方案能够检测到完全匹配的重复项。因此,它当前将输出: 我想增加一些可能性,以便它们也在输出列表中: 下面是我当前的代码: 我将非常感谢任何善意的建议,以导致实现这种检查的解决办法?我个人认为这里没有任何可能的合乎逻辑的解决办法?也许只是某种基于分数的Levenshtein距离计算和检测?如果这是不可能的,将是有益的,至少得到这些(匹配多个单词,例如两个):
问题内容: 我正在执行模糊搜索,需要查看匹配的单词。例如,如果我正在搜索查询,并且它使该字段与句子匹配,则我需要能够知道匹配是由于单词引起的。 我尝试设置参数,但似乎未包含我需要的信息。有什么想法吗? 问题答案: 好吧,这就是我想要的: 经过一些研究,我发现了elasticsearch的突出功能。 默认情况下,它返回匹配项周围的上下文片段,但是您可以将片段大小设置为查询长度,以仅返回完全匹配项。例
我需要实现的是基于单个字段(产品名称,基本上由所有可能的筛选器值组成)来匹配文档。我知道这不是最可靠的解决方案,但我只有这一个领域可以使用。 我需要能够发送搜索查询,并将该查询中的单词以任何顺序匹配到name字段(名称应包含搜索查询中的所有单词)。实际上,在这一点上,简单的效果很好,但是那里缺少的是模糊。因为我们需要的另一件事是允许用户做一些拼写错误,并且仍然获得相关的结果。 我的问题是,有没有什
这看起来很简单,我确信我一定忽略了什么。我无法确定如何在Lucene中执行以下操作: 我在搜索地名。 我有一个名为的字段 它正在使用 它 的值中包含1个空格:. 由于文化上的不同拼写或真正的拼写错误,搜索词可能包含也可能不包含额外的空格。例如。而不是. 如果我使用术语,我会被击中。 如果我使用术语,我不会得到击中。 下面是我从SiteCore使用LINQ to Lucene构建谓词的代码:
我正在努力在我们的应用程序中集成Lucene。Lucene目前正在工作,例如当我搜索“上传”时,文档中有一些叫做“上传”的文本,那么它就工作了,但是当我搜索“上传”时,那么它就不工作了。有什么想法吗? 代码: 谢谢你。
我试图用一个词作为查询来查找匹配项,但它似乎找不到。我正在使用标准分析仪,但找不到准确的结果。 我的索引文档是: 如果使用通配符查询: 它会返回内容:“敏捷的棕色狐狸跳过懒惰的狗” 如果使用术语查询: 它会返回内容:“敏捷的棕色狐狸跳过懒惰的狗” 现在,我想用“狐狸”作为我的新名词 但是我不知道哪个是正确的查询,或者如何做。我已经尝试了QueryParser、TermQuery和MultiPhra