带有白色和查询与操作的Solr查询

0tdrvxhp  于 2022-11-05  发布在  Solr
关注(0)|答案(1)|浏览(132)

我正在我的项目中做一个搜索解决方案,除了一个场景之外,它都工作得很好。搜索查询操作是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无效

lndjwyie

lndjwyie1#

问题是在空格处转义。当我转义空格时,它被当作单个单词“40486 52pider57”处理,当空格没有转义时,它被当作两个不同的单词40486和52pider57处理,所以它工作正常。

相关问题