我有一个搜索字段,用户可以根据三个字段搜索产品:productCFN (String type)
,productBrand (String type)
和productUpnName (text type)
。我基于优先级给出提升值,以便结果将以相同的顺序(最高提升值到最低提升值)。
但搜索行为无法按预期工作(有时)。我给了这样的提升值
productCFN 100 [我们根据为搜索字段提供的值自定义了提升值]
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))
我的问题是为什么即使我给productCFN得分最高,产品也没有出现在其产品CFN以'CC0'开头的顶部。
我认为整个问题是由于接近而产生的,但我已经给出了最低分值,有时候resule显示的顺序错误。
我正在使用StandardTokenizerFactory
Tokenizer,它在空格上进行标记,以及剥离字符。它是否真的符合我的要求,或者最好使用KeywordTokenizerFactory
?
我还搜索了DISMAX
和EDISMAX
。如果使用接近度和提升值,它是否真的会影响结果。
让我们再看一个例子,我有一个产品带有productCFN X0406295L
,我开始按X04
进行搜索,但它在顶部显示错误的产品。
productCFN - 176-504
productUpnName - CASE 176-504 ATLANTIS SCREW TRAY FA
我很惊讶为什么它正在搜索上述产品,即使该产品没有任何品牌且UPN名称也不包含X04
字。
它是否真的基于数字进行标记,因为04
存在。我完全对solr搜索感到困惑。
请帮帮我。
答案 0 :(得分:0)
您的问题是使用String vs Text。默认情况下,String字段不会被标记化。
你应该对Text进行搜索,你应该使用String for Facets等。