gpt4 book ai didi

java - 在SOLR中使用类似操作

转载 作者:行者123 更新时间:2023-12-01 15:16:35 25 4
gpt4 key购买 nike

我正在使用 SOLR 搜索引擎。

几天前,我提出了在给定列上执行类似操作的要求。

例如:

Column name: Name

Content: Stackoverflow is good.

查询是

Name:("*overflow is*")

这个查询应该给我具体的“Stackoverflow 很好。” 结果

该输入参数应被视为一个整体输入。它不应被视为自由文本搜索。它应该像 SQL 中的“like”操作一样工作。

为此,我正在使用此配置。

<fieldtype class="solr.TextField" name="string_wildcards" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StandardFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.TrimFilterFactory" />
<filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StandardFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.TrimFilterFactory" />
<filter class="solr.KeywordTokenizerFactory"/>
</analyzer>
</fieldtype>

此查询没有为我提供“like”操作预期的结果。

例如:名称:(“溢出是”)

将作为自由文本进行搜索,而不是像“LIKE”运算符那样。

它给我的结果是

  1. 什么是溢出。
  2. 我的名字是 ABC
  3. 什么是溢出
  4. Stackoverflow 很好。

我的预期结果只是第 4 点,上面的配置给了我所有 4 个结果,这是错误的。

请帮助我根据我的要求进行正确配置。

最佳答案

重点是,您可以使用 StandardTokenizerFactory 分割/标记您的输入。在本例中,您搜索 *overflowis*

但是:左侧的通配符,如

*overflow

solr默认不支持。在这种情况下,您必须为字段(列)“名称”建立索引两次。

这意味着:从 string_wildcards 类型添加一个文件名,就像您编写的那样,添加第二个字段 - 让我们从 left_wildcards_string 类型将其称为 eman (反转:名称)。在此字段类型定义中添加 solr.ReversedWildcardFilterFactory

最后,您的搜索范围涵盖了这两个字段。

关于java - 在SOLR中使用类似操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11517000/

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