首页 > 解决方案 > ElasticSearch Search-as-you-type field type field with partial search

问题描述

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

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

有没有办法使用Search-as-you-type 字段类型来做到这一点,或者我只能用 ngrams 做到这一点?

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"
      ]
    }
  }
}

标签: elasticsearchkibana

解决方案


推荐阅读