我有一个SOLR搜索异常。当我进入SOLR管理并运行以下搜索时,我会得到一个奇怪的行为(请注意,myField__s
只有两个可能的值,MyValue1
和MyValue2
)。
// 13,461 found - Good
fq:
// 9,168 found - Good
fq: myField__s:"MyValue1"
// 4,293 found - Good
fq: NOT myField__s:"MyValue1"
// 0 found - Bad, expected 13,461
fq: myField__s:"MyValue1" OR NOT myField__s:"MyValue1"
// 9,168 found - Good
fq: myField__s:"MyValue1" OR NOT myField__s:"MyValue2"
// 9,168 found - Bad, expected 13,461
fq: myField__s:"MyValue1" OR (NOT myField__s:"MyValue1")
我觉得关于fq语法,我缺少了一些重要的东西。有人能提供指导吗?
Solr有布尔搜索MUST、SHOULD和MUST_NOT的自由选项。如果您在某个术语之前包含NOT前缀,这意味着您使用MUST_NOT选项将其添加到布尔查询中,所以带有此术语的文档将从搜索结果中排除。(前缀AND变为MUST选项,前缀OR变为SHOULD option)。换句话说,查询字符串
myField__s:"MyValue1" OR NOT myField__s:"MyValue1"
将被解析为
myField__s:"MyValue1" -myField__s:"MyValue1".
您可以在solr响应的fq字段中看到一个转换后的查询
{
"responseHeader":{
"status":0,
"QTime":11,
"params":{
"debugQuery":"true",
"indent":"true",
"q":"some query",
"wt":"json",
"fq":"myField__s:MyValue1 -myField__s:MyValue1"],
......