带空格和带查询和操作的 Solr 查询
Solr query with white spaces and with query and operation
我正在我的项目中开发一个搜索解决方案,除一种情况外,一切正常。搜索查询操作是 AND (q.op=AND),当我搜索某些东西时:40486 52P.57
它没有给出任何结果(这里的查询是在 java 中准备的),但是当我在 solr 管理面板中搜索相同内容时,它给出了正确的结果。在我的 java 代码中,我正在转义搜索查询,因此查询会像 q : 40486\ 52P.57
一样传递给 solr,但是当我在 solr admin 中执行它时,它就像 q : 40486 52P.57
.
注:上述搜索查询中的两个词属于两个不同的领域。
我注意到的另一件事是,如果搜索查询中的词属于同一个字段,那么结果会很好,没有任何问题,例如:40486 67
两个词都属于同一个字段,来自我的 java 代码的查询是 q: 40486\ 67
而在 solr admin 中它是 q : 40486 67
但在这两种情况下它都工作正常。
我在这里看不出任何问题,有人可以帮我解决这个问题吗?
更新
我找到了它不起作用的根本原因。问题在于转义 space。实际上,我正在使用 qf
中的各个字段来搜索 100% 匹配,在这种情况下我的意思是 mm=100
。因此,转义 space 将使查询成为 q : 40486\ 52P.57
并且不给出任何结果,但是如果我将多字段与其中的所有可搜索字段一起使用,那么即使查询是 [=12] 它也会给出结果=].这是 solr 中 edismax 的限制吗?有人可以帮助我如何在不创建多字段的情况下解决这个问题吗?我的期望是即使在使用 qf
参数中的各个字段转义 space 之后它也应该工作。
示例索引:
{
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 无效
问题出在白色space处的转义上。当我转义 whitespace 时,它被视为单个单词“40486 52P.57”,而当 space 未转义时,它被视为两个不同的单词 40486 和 52P.57,因此它工作正常。
我正在我的项目中开发一个搜索解决方案,除一种情况外,一切正常。搜索查询操作是 AND (q.op=AND),当我搜索某些东西时:40486 52P.57
它没有给出任何结果(这里的查询是在 java 中准备的),但是当我在 solr 管理面板中搜索相同内容时,它给出了正确的结果。在我的 java 代码中,我正在转义搜索查询,因此查询会像 q : 40486\ 52P.57
一样传递给 solr,但是当我在 solr admin 中执行它时,它就像 q : 40486 52P.57
.
注:上述搜索查询中的两个词属于两个不同的领域。
我注意到的另一件事是,如果搜索查询中的词属于同一个字段,那么结果会很好,没有任何问题,例如:40486 67
两个词都属于同一个字段,来自我的 java 代码的查询是 q: 40486\ 67
而在 solr admin 中它是 q : 40486 67
但在这两种情况下它都工作正常。
我在这里看不出任何问题,有人可以帮我解决这个问题吗?
更新
我找到了它不起作用的根本原因。问题在于转义 space。实际上,我正在使用 qf
中的各个字段来搜索 100% 匹配,在这种情况下我的意思是 mm=100
。因此,转义 space 将使查询成为 q : 40486\ 52P.57
并且不给出任何结果,但是如果我将多字段与其中的所有可搜索字段一起使用,那么即使查询是 [=12] 它也会给出结果=].这是 solr 中 edismax 的限制吗?有人可以帮助我如何在不创建多字段的情况下解决这个问题吗?我的期望是即使在使用 qf
参数中的各个字段转义 space 之后它也应该工作。
示例索引:
{
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 无效
问题出在白色space处的转义上。当我转义 whitespace 时,它被视为单个单词“40486 52P.57”,而当 space 未转义时,它被视为两个不同的单词 40486 和 52P.57,因此它工作正常。