基于术语位置和模糊的Elasticsearch搜索

问题描述 投票:0回答:1

我是 Elasticsearch 的初学者,我尝试将查询与术语位置和模糊结合起来,但结果不是我所期望的。

我尝试过这个查询

{
    "query": {
        "bool": {
            "must": [
                {
                    "bool": {
                        "must": [
                            {
                                "query_string": {
                                    "query": "douille~ raccordment~",
                                    "fields": [
                                        "name^10"
                                    ],
                                    "default_operator": "AND",
                                    "fuzziness": "AUTO:10,20"
                                }
                            }
                        ],
                        "should": [
                            {
                                "span_first": {
                                    "match": {
                                        "span_multi": {
                                            "match": {
                                                "fuzzy": {
                                                    "name": {
                                                        "value": "douille",
                                                        "fuzziness": "AUTO"
                                                    }
                                                }
                                            }
                                        }
                                    },
                                    "end": 1
                                }
                            },
                            {
                                "span_first": {
                                    "match": {
                                        "span_multi": {
                                            "match": {
                                                "fuzzy": {
                                                    "name": {
                                                        "value": "douille",
                                                        "fuzziness": "AUTO"
                                                    }
                                                }
                                            }
                                        }
                                    },
                                    "end": 2
                                }
                            }
                        ]
                    }
                }
            ]
        }
    }
}

“raccordment”这个词拼写不好(法语)。正确的词是“raccordement”。我的索引中有一个产品“Douille Raccordement”,而产品名称中有“Douille”但没有“Raccordement”,但不在我的索引中的第一个位置。当我尝试查询时,没有结果。

我的目标是通过搜索“douille raccordment”获得此类结果(基于术语位置,有或没有拼写错误):

  • 杜耶赛车手
  • 杜耶1
  • 10 杜耶
  • 赛车手风琴1
  • 赛车2

我使用 Elasticsearch 7。

你知道为什么吗?

感谢您的帮助

elasticsearch kibana
1个回答
0
投票

对于您问题中的这些数据。此查询可以帮助您:

POST idx_test/_bulk
{"index":{}}
{"name": "Douille Raccordement"}
{"index":{}}
{"name": "Douille 1"}
{"index":{}}
{"name": "10 Douilles"}
{"index":{}}
{"name": "Raccordement 1"}
{"index":{}}
{"name": "Raccordement 2"}

GET idx_test/_search
{
  "query": {
    "match": {
      "name": {
        "query": "douille raccordment",
        "fuzziness": "AUTO"
      }
    }
  }
}

输出:

{
  "hits" : {
    "hits" : [
      {
        "_source" : {
          "name" : "Douille Raccordement"
        }
      },
      {
        "_source" : {
          "name" : "Douille 1"
        }
      },
      {
        "_source" : {
          "name" : "10 Douilles"
        }
      },
      {
        "_source" : {
          "name" : "Raccordement 1"
        }
      },
      {
        "_source" : {
          "name" : "Raccordement 2"
        }
      }
    ]
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.