gpt4 book ai didi

Solr搜索部分句子

转载 作者:行者123 更新时间:2023-11-30 23:50:29 25 4
gpt4 key购买 nike

我们在使用 Solr 搜索来搜索部分句子时遇到了麻烦。我们对以下结果尝试了不同的查询:

<doc>
<str name="id">7975</str>
<str name="name">Ici Paris XL geschenkset aanbieding</str>
<long name="_version_">1467524712314699776</long></doc>
</doc>
<doc>
<str name="id">7976</str>
<str name="name">De tuinen geschenkset aanbieding</str>
<long name="_version_">1467524712315748352</long></doc>
</doc>

我们尝试过的搜索:

  • *:* 返回所有内容
  • *Paris* 仅返回第一个(对于 Paris,这是正确的)
  • *Paris*XL* 只返回第一个
  • *paris*XL* 什么都不返回(大写 P 现在小写)
  • *(Paris XL)* 返回所有内容
  • *"Paris XL"* 返回所有内容
  • (Paris XL) 什么都不返回
  • "Paris XL" 什么都不返回

我们想要的是能够搜索“Paris XL”(带空格)并返回第一个结果。所以我们可以搜索句子的一部分。那可能吗?以及如何?

最佳答案

您缺少的是 Lucene 和 Solr 如何执行其搜索的基本部分。 Solr 不搜索,但它会在为特定文档集创建的索引中查找搜索的标记(单词)。这样的索引——非常简单——就像每本书末尾的索引。您可以在那里查找每个单词在实际文本中的位置。

目前您的字段 name 根本没有标记化,因为您使用的是 fieldType string。这意味着该字段的全部内容被索引为一个 词。正如您已经注意到的那样,这是一个问题。

当您现在搜索 paris 时,Solr 会查看索引并搜索标记 paris 是否存在。但事实并非如此。以您发布的两个示例为例,您的索引包含两个条目

  1. Ici Paris XL geschenkset aanbieding
  2. De tuinen geschenkset aanbieding

这些条目中的每一个都需要等于 paris - 从前面到结尾 - 才能产生命中。不是这种情况。因此,您使用通配符 * 包围了 paris。这使得 Solr 会查看索引的每个条目,这将导致非常、非常、非常糟糕的性能。


那么你应该怎么做才能解决这个问题?开始标记化!这个描述的不错in the official documentation或在 the Solr Tutorial .


最后,您将在您的 schema.xml 中添加一个自定义字段类型,与此类似

<fieldType name="text_general" class="solr.TextField">
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>

然后您需要将字段 name 的 fielType 更改为新的 fielType,并且您需要重建索引。

那么你的索引将包含更多的字段名条目,而不是像上面的两个,而是这些

  1. 我是
  2. 巴黎
  3. xl
  4. 设置
  5. 安别丁
  6. 推嫩

然后您可以查询"paris xl"。记下搜索前后的撇号。这使得 Solr 执行短语查询,因此只有当 paris 后跟 xl 时它才会产生命中。

关于Solr搜索部分句子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23538779/

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