在Solr 4中搜索字符串中的单词

时间:2013-05-22 13:50:38

标签: solr solrnet solr4

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

然而,我想在搜索结果中包含很多单词...比如结果应该包括.. Jadeblack,Superblack,blackblue,nightblack以及其他在字符串中有黑色的单词而不仅仅是单词black。

但是,这些结果的相关性较低,应在具有“黑色”字样的结果后进行排名。

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

2 个答案:

答案 0 :(得分:2)

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

  1. text_exact - 完全匹配将提升更高
  2. text_ngram - ngram字段可帮助您将部分匹配与低于完全匹配的提升相匹配
  3. 您可以将提升配置为text_exact^2 text_ngram^0.5

答案 1 :(得分:0)

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

name:*black* OR description:*black*

通过此搜索,您可以获得“name”或“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>

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

另一种解决方案是使用不同的类型(例如“text”)而不是“string”。