我正在我的项目中做一个搜索解决方案,除了一个场景之外,它都工作得很好。搜索查询操作是AND(q.op=AND),当我搜索例如:40486 52P.57
它没有给出任何结果(这里的查询是在java中准备的),但是当我在solr管理面板中搜索相同的查询时,它给出了正确的结果。在我的java代码中,我转义了搜索查询,所以查询被传递到solr,就像q : 40486\\ 52P.57
,但是当我在solr管理面板中执行它时,它就像q : 40486 52P.57
。
注意:上述搜索查询中的两个词属于两个不同的字段。
我注意到的另一件事是,如果搜索查询中的单词属于同一个字段,那么结果会很好,没有任何问题,例如:40486 67
,其中两个单词属于同一个字段,我的java代码中的查询是q: 40486\\ 67
,在solr admin中是q : 40486 67
,但在这两种情况下都工作得很好。
我看不出这里有什么问题,有人能帮我吗?
更新
我找到了它不工作的根本原因。问题是转义空格。实际上我使用qf
中的单个字段来搜索100%匹配,我在本例中的意思是mm=100
。因此转义空格将使查询成为q : 40486\\ 52P.57
,并且不给出任何结果。但是如果我使用multifield,其中包含所有可搜索的字段,那么即使查询是q : 40486\\ 52P.57
,它也会给出结果。这是solr中edismax的限制吗?有人能帮助我如何在不创建multifield的情况下修复这个问题吗?我的期望是,即使在使用qf
参数中的各个字段转义空格后,它也应该工作。
示例索引:
{
productNumber : 40486754,
productShot : 52P.57 UTM,
description : something,
general_search {
40486754,
52P.57 UTM,
something
}
},
{
productNumber : 12345,
productShot : 52P.57 ABC,
description : xzy,
general_search {
12345,
52P.57 ABC,
xzy
}
}
**示例查询:**查询1:
qt=/select&q.op=AND&defType=edismax&q=40486\+52P.57&qf=productNumber+productShot+description
个
查询2:
qt=/select&q.op=AND&defType=edismax&q=40486 52P.57&qf=productNumber+productShot+description
查询3:
qt=/select&q.op=AND&defType=edismax&q=40486\+52P.57&qf=general_search
个
在上面的查询中,查询2和3有效,但查询1无效
1条答案
按热度按时间lndjwyie1#
问题是在空格处转义。当我转义空格时,它被当作单个单词“40486 52pider57”处理,当空格没有转义时,它被当作两个不同的单词40486和52pider57处理,所以它工作正常。