我有一个搜索字段,用户可以根据三个字段搜索产品:productCFN (String type)
, productBrand (String type)
和productUpnName (text type)
。我根据优先级给出boost值,以便结果以相同的顺序出现(最高boost值到最低boost值)。
但是搜索行为不像预期的那样工作(有时)。我设置了这样的boost值
productCFN 100[我们已经根据搜索字段给出的值定制了boost值]
productBrand 20
productUpnName 50
所以如果我在搜索,它应该首先搜索productCFN然后是productUpnName然后是productBrand以相同的顺序搜索结果将显示在前端
我也检查了查询,似乎是正确的,但不知道为什么排序不工作(我用'CC0'搜索)
q=(productUpnName_text_en_us:(CC0~^25.0+OR+cc0~^25.0+OR+cc0^100.0+OR+CC0^100.0+OR+CC0*^50.0+OR+cc0*^50.0))+OR+(productCFN_string:(cc0^200.0+OR+CC0*^100.0+OR+CC0^200.0+OR+cc0*^100.0))+OR+(productBrand_string_mv:(CC0^40.0+OR+cc0*^20.0+OR+cc0^40.0+OR+CC0*^20.0))
我的问题是为什么产品没有出现在产品cfn以'CC0'开头的顶部,即使我给了产品cfn最高分
我认为整个问题是由于邻近造成的,但我已经给出了最低分数值,但有时结果仍以错误的顺序显示。
我正在使用StandardTokenizerFactory
Tokenizer,它对空白进行标记,以及条带字符。它真的符合我的要求吗?还是使用KeywordTokenizerFactory
更好?
我也搜索了DISMAX
和EDISMAX
。如果使用接近度和升压值,真的会影响结果吗?
让我们再举一个例子,我有一个产品与productCFN X0406295L
,我开始搜索X04
,但它显示错误的产品在顶部。
productCFN - 176-504
productUpnName - CASE 176-504 ATLANTIS SCREW TRAY FA
我很惊讶为什么它正在搜索上述产品,即使该产品没有任何品牌,UPN名称也不包含X04
单词。它是否真的基于数字进行标记,因为04
在那里。我完全被solr搜索弄糊涂了。
请帮帮我。
你的问题是使用字符串与文本。默认情况下,字符串字段不会被标记。
你应该搜索文本,你应该使用字符串来搜索facet等