0

在 solr 4 上,我正在查询单词“black”,它返回唯一具有确切单词的产品的结果 - 名称和 desc 中的“black”。我只搜索名称和描述。

但是,我想在搜索结果中包含很多单词.. 就像结果应该包含.. Jadeblack、Superblack、blackblue、nightblack 和其他在字符串中任何地方都有黑色的单词,而不仅仅是单词 black。

但是,此类结果的相关性较低,应排在带有“黑色”一词的结果之后。

你能告诉我应该如何改变以获得这种结果。

4

2 回答 2

2

建议使用两个字段。将 text_exact 字段复制到 text_ngram 字段。

  1. text_exact- 精确匹配将被提升得更高
  2. text_ngram- 一个ngram字段,它将帮助您匹配部分匹配,其提升低于完全匹配

您可以将升压配置为text_exact^2 text_ngram^0.5

于 2013-05-23T04:10:09.897 回答
0

您可以在字符串类型字段的搜索词中使用通配符。例如:

name:*black* OR description:*black*

通过此搜索,您将获得“名称”或“描述”中包含“黑色”的任何结果,并且不必完全匹配。为了根据匹配的质量进行排序,我认为您必须为精确匹配定义提升并按分数排序。但这我还没有完成。

以防万一你还不知道。默认情况下,对类型字符串的搜索区分大小写。所以你不会找到“黑色”的匹配项(除非你真的有一个用大写字母写的文件)。要更改此行为,您必须定义自己的不区分大小写的字符串类型:

<fieldType name="string_ci" class="solr.TextField" sortMissingLast="true" omitNorms="true">
    <analyzer type="query">
        <tokenizer class="solr.KeywordTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
    </analyzer>
</fieldType>

但这不适用于通配符搜索(如“黑色”)。在这种情况下,您必须在发送到 solr 之前将每个应包含通配符的搜索词转换为小写。

不同的解决方案是使用不同的类型(例如“文本”)而不是“字符串”。

于 2013-05-22T14:17:53.250 回答