使用布尔查询的 Elasticsearch 不同结果
Elasticsearch different results with boolean queries
我有两个查询,我认为应该 return 相同数量的结果。
首先是 "must" 和 query_string 在 2 个字段上。例如
{
"query": {
"nested": {
"path": "app.pub",
"query": {
"bool": {
"must": [
{
"query_string": {
"query": "wheel* chair* foot* driven*",
"fields": [
"app.pub.title.*.docdba",
"app.pub.abstract.*.docdba"
],
"default_operator": "and"
}
}
]
}
}
}
}
}
这给了我 120 个结果。第二个是 "should" 查询,它在标题字段或摘要上搜索带有通配符的相同字符串。例如:
{
"query": {
"nested": {
"path": "app.pub",
"query": {
"bool": {
"should": [
{
"query_string": {
"query": "wheel* chair* foot* driven*",
"fields": [
"app.pub.title.*.docdba"
],
"default_operator": "and"
}
},
{
"query_string": {
"query": "wheel* chair* foot* driven*",
"fields": [
"app.pub.abstract.*.docdba"
],
"default_operator": "and"
}
}
]
}
}
}
}
}
这里我得到了 109 个结果。所以我少了11次点击。有人知道为什么吗?
简单。在第一次搜索中,我在两个字段中寻找 4 个词。这意味着它匹配一个字段中没有所有搜索词的字段,但也匹配两个的组合。在第二次搜索中,所有 4 个词都必须出现在一个或另一个字段中。
我有两个查询,我认为应该 return 相同数量的结果。 首先是 "must" 和 query_string 在 2 个字段上。例如
{
"query": {
"nested": {
"path": "app.pub",
"query": {
"bool": {
"must": [
{
"query_string": {
"query": "wheel* chair* foot* driven*",
"fields": [
"app.pub.title.*.docdba",
"app.pub.abstract.*.docdba"
],
"default_operator": "and"
}
}
]
}
}
}
}
}
这给了我 120 个结果。第二个是 "should" 查询,它在标题字段或摘要上搜索带有通配符的相同字符串。例如:
{
"query": {
"nested": {
"path": "app.pub",
"query": {
"bool": {
"should": [
{
"query_string": {
"query": "wheel* chair* foot* driven*",
"fields": [
"app.pub.title.*.docdba"
],
"default_operator": "and"
}
},
{
"query_string": {
"query": "wheel* chair* foot* driven*",
"fields": [
"app.pub.abstract.*.docdba"
],
"default_operator": "and"
}
}
]
}
}
}
}
}
这里我得到了 109 个结果。所以我少了11次点击。有人知道为什么吗?
简单。在第一次搜索中,我在两个字段中寻找 4 个词。这意味着它匹配一个字段中没有所有搜索词的字段,但也匹配两个的组合。在第二次搜索中,所有 4 个词都必须出现在一个或另一个字段中。