为什么elasticsearch span_near与布尔查询类似?

e5njpo68  于 2022-11-02  发布在  ElasticSearch
关注(0)|答案(1)|浏览(148)

我想在elasticsearch中使用span_near查询,但它并不完全满足我的需求。使用span_near时,所有span_terms必须存在于子字符串中,否则它实际上会忽略文档。我想使用一个类似span_near的查询,考虑到文档只有一些span_terms的分数。
我该怎么办?

"query": {
    "bool": {
      "should": [
        {
          "span_near": {
            "clauses": [
              {
                "span_term": {
                  "field": "term1"
                }
              },
              {
                "span_term": {
                  "field": "term2"
                }
              },
              {
                "span_term": {
                  "field": "term3"
                }
              }
            ],
            "slop": 10,
            "in_order": false,
            "boost" : 1
          }
        },
        ...
     ]
     }
  }
}
gmxoilav

gmxoilav1#

span_near本身没有您要查找的选项。您可以在should子句中添加另一个匹配查询,该查询将返回包含任何搜索词的文档。由于span_near具有更高的提升,因此其文档的得分也会更高。

{
  "query": {
    "bool": {
      "should": [
        {
          "span_near": {
            "clauses": [
              {
                "span_term": {
                  "text": "term1"
                }
              },
              {
                "span_term": {
                  "text": "term2"
                }
              },
              {
                "span_term": {
                  "text": "term3"
                }
              }
            ],
            "slop": 10,
            "in_order": false,
            "boost": 5
          }
        },
        {
          "match": {
            "text": "term1 term2 term3"
          }
        }
      ]
    }
  }
}

相关问题