具有部分搜索的ElasticSearch按您键入的搜索字段类型字段

ryoqjall  于 2022-10-06  发布在  ElasticSearch
关注(0)|答案(1)|浏览(209)

我最近更新了我的ngram实现设置,以使用输入时搜索字段类型。https://www.elastic.co/guide/en/elasticsearch/reference/7.x/search-as-you-type.html

这很有效,但我注意到部分搜索不起作用。如果我搜索编号00060434,我会得到想要的结果,但我也希望能够搜索60434,那么它应该返回Document 3。

有没有办法用输入时搜索字段类型来做这件事,或者我只能用ngram做这件事?

PUT searchasyoutype_example
{
  "settings": {
    "analysis": {
      "analyzer": {
        "englishAnalyzer": {
          "tokenizer": "standard",
          "filter": [
            "lowercase",
            "trim",
            "ascii_folding"
          ]
        }
      },
      "filter": {
        "ascii_folding": {
          "type": "asciifolding",
          "preserve_original": true
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "number": {
        "type": "search_as_you_type",
        "analyzer": "englishAnalyzer"
      },

      "fullName": {
        "type": "search_as_you_type",
        "analyzer": "englishAnalyzer"
      }
    }
  }
}

PUT searchasyoutype_example/_doc/1
{
  "number" : "00069794",
  "fullName": "Employee 1"
}

PUT searchasyoutype_example/_doc/2
{
  "number" : "00059840",
  "fullName": "Employee 2"
}

PUT searchasyoutype_example/_doc/3
{
  "number" : "00060434",
  "fullName": "Employee 3"
}

GET searchasyoutype_example/_search
{
  "query": {
    "multi_match": {
      "query": "00060434",
      "type": "bool_prefix",
      "fields": [
        "number",
        "number._index_prefix",
        "fullName",
        "fullName._index_prefix"
      ]
    }
  }
}
6jygbczu

6jygbczu1#

我认为您需要查询numbernumber._2gramnumber._3gram,如下所示:

GET searchasyoutype_example/_search
{
  "query": {
    "multi_match": {
      "query": "00060434",
      "type": "bool_prefix",
      "fields": [
        "number",
        "number._2gram",
        "number._3gram",
      ]
    }
  }
}

search_as_you_type创建3个子字段。关于这篇文章的工作原理,您可以查看更多信息:

https://ashish.one/blogs/search-as-you-type/

相关问题