lucene 在ElasticSearch中如何使用模糊搜索查询地名

0ve6wy6x  于 2022-11-07  发布在  Lucene
关注(0)|答案(2)|浏览(288)

我已经在ElasticSearch中插入了位置,下面是ElasticSearch存储位置的示例:

[
  {
    "lat": 1,
    "lon": 1,
    "place": "asddda ddsd asdad vasanth hhjkhk sdsdd asddasd"
  },
  {
    "lat": 2,
    "lon": 2,
    "place": "asddda ddsd asdad vasanth1 hhjkhk sdsdd asddasd"
  },
  {
    "lat": 3,
    "lon": 3,
    "place": "asddda ddsd asdad vasanth2 hhjkhk sdsdd asddasd"
  },
  {
    "lat": 4,
    "lon": 4,
    "place": "asddda ddsd asdad test hhjkhk sdsdd asddasd"
  }
]

如果我搜索vasanth,它会给出正确的结果,因为它应该给予所有3个结果。但如果我搜索字符删除Vsanth,它只给出一个结果,但现在它也应该给出3个结果。而且,如果我插入一个字符,那么我也。不能正常工作。
根据ElasticSearch单据,它的模糊查询有以下特点:

Changing a character (box → fox)
Removing a character (black → lack)
Inserting a character (sic → sick)
Transposing two adjacent characters (act → cat)

下面是我正在使用的查询,

{
    "query": {
        "fuzzy": {
            "address": {
                "value": "Vsanth",
                "fuzziness":15,
                "transpositions":true,
                 "boost": 5
            }
        }
    }
}

那么,我如何修改查询以使用模糊查询的所有四个特性呢?我不知道我犯了什么错误。

3bygqnnd

3bygqnnd1#

问题是您有更多的编辑距离来匹配vasanth1 and vasanth2
参考文献
模糊度参数可指定为:
0、1、2
0..2=必须完全匹配
3..5=允许一次编辑
5个以上=允许两次编辑
您将模糊度指定为15,因此只允许两次编辑,这是es中的最大值。
因此,这里的问题是,您的查询需要3个编辑距离,这是不支持的。

原因三:
Vsanth --〉Vsanth --〉瓦桑--〉瓦桑1

1.大小写变化-〉大写V变为小写v
1.添加a -〉凡士林
1.再加一个-〉vasanth 1
因此,您将获得唯一的vasanth匹配文档。
模糊查询是术语查询,它们不会被分析。添加小写过滤器到您的place字段的分析器在这里没有帮助。

9cbw7uwe

9cbw7uwe2#

可以使用“fuzzy”运算符在query_string中进行模糊搜索:

它使用Damerau-Levenshtein距离来查找最多有两处变化的所有术语,其中一处变化是单个字符的插入、删除或替换,或者两个相邻字符的换位。
要获得详细说明,请参阅此官方文档
添加一个工作示例,包括搜索查询和搜索结果,采用与问题中提到的相同的示例索引数据

搜索查询:

{
  "query": {
    "query_string": {
      "query": "Vsanth~"
    }
  }
}

搜索结果:

"hits": [
  {
    "_index": "foo",
    "_type": "_doc",
    "_id": "1",
    "_score": 1.0033107,
    "_source": {
      "lat": 1,
      "lon": 1,
      "place": "asddda ddsd asdad vasanth hhjkhk sdsdd asddasd"
    }
  },
  {
    "_index": "foo",
    "_type": "_doc",
    "_id": "2",
    "_score": 0.8026485,
    "_source": {
      "lat": 2,
      "lon": 2,
      "place": "asddda ddsd asdad vasanth1 hhjkhk sdsdd asddasd"
    }
  },
  {
    "_index": "foo",
    "_type": "_doc",
    "_id": "3",
    "_score": 0.8026485,
    "_source": {
      "lat": 3,
      "lon": 3,
      "place": "asddda ddsd asdad vasanth2 hhjkhk sdsdd asddasd"
    }
  }
]

相关问题