在solr 4上,我正在查询单词“black”,它会返回唯一一个具有确切单词的产品的结果 - 名称&中的“black”递减。我只搜索名称和描述。
然而,我想在搜索结果中包含很多单词...比如结果应该包括.. Jadeblack,Superblack,blackblue,nightblack以及其他在字符串中有黑色的单词而不仅仅是单词black。
但是,这些结果的相关性较低,应在具有“黑色”字样的结果后进行排名。
您能告诉我应该如何改变以获得这种结果。
答案 0 :(得分:2)
建议使用两个字段。 将text_exact字段复制到text_ngram字段。
text_exact
- 完全匹配将提升更高text_ngram
- ngram字段可帮助您将部分匹配与低于完全匹配的提升相匹配您可以将提升配置为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”。