gpt4 book ai didi

Lucene查询: bla~* (match words that start with something fuzzy),如何?

转载 作者:行者123 更新时间:2023-12-02 22:09:37 25 4
gpt4 key购买 nike

在Lucene查询语法中,我想在有效的查询中将*和〜组合在一起,类似于:
bla〜*//无效的查询

含义:请匹配以“bla”开头的单词或类似于“bla”的单词。

更新:
我现在要做的是在输入很少的情况下使用以下代码(SOLR模式的代码段):

<fieldtype name="text_ngrams" class="solr.TextField">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="0"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15" side="front"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="0"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>

如果您不使用SOLR,请执行以下操作。

Indextime :通过创建一个包含我(简短)输入的所有前缀的字段来索引数据。

搜索时间:仅使用〜运算符,因为前缀明确存在于索引中。

最佳答案

我不认为Lucene支持这样的事情,也不相信它有一个简单的解决方案。

“模糊”搜索不适用于固定数量的字符。 bla~可能与blah相匹配,因此必须考虑整个术语。

您可以做的是实现查询扩展算法,该算法采用查询bla~*并将其转换为一系列OR查询

bla* OR blb* OR blc OR .... etc.

但这仅在字符串非常短或您可以根据某些规则缩小扩展范围时才可行。

或者,如果前缀的长度是固定的,则可以添加带有子字符串的字段,然后对该字段进行模糊搜索。那将给您您想要的东西,但是仅在您的用例足够狭窄的情况下才起作用。

您没有确切说明为什么需要这样做,也许这样做会引发其他解决方案。

我能想到的一种情况是处理不同形式的单词。例如。查找 carcars

因为有词干,所以这在英语中很容易。在其他语言中,即使不是不可能,实现单词词干分析器也可能非常困难。

但是,在这种情况下,您可以(假设您可以使用一本好的字典)查找搜索词并以编程方式扩展搜索以搜索单词的所有形式。

例如。对 cars的搜索将转换为 car OR cars。这已在至少一个搜索引擎中成功应用于我的语言,但显然实现起来并不容易。

关于Lucene查询: bla~* (match words that start with something fuzzy),如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2631206/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com