Elasticsearch:查找带空格和不带空格的值

标签 elasticsearch mapping whitespace

我们有一些带有文章编号的字段。这篇文章编号看起来像 AB 987 g567 323。当我搜索“AB 987 g”时,我找到了正确的产品,但是当我搜索时不带空格,我找不到任何东西。我尝试过pattern_replace,但不起作用。

"whitespace_filter": {
      "alphabets_char_filter": {
        "type": "pattern_replace",
        "pattern": " ",
        "replacement": ""
    }

如何搜索带空格和不带空格的文章编号?

最佳答案

您需要使用edge_ngram以及char_filter ,实现您的用例

添加工作示例

索引映射:

{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_analyzer": {
          "tokenizer": "my_tokenizer",
          "char_filter": [
            "replace_whitespace"
          ]
        }
      },
      "tokenizer": {
        "my_tokenizer": {
          "type": "edge_ngram",
          "min_gram": 2,
          "max_gram": 10,
          "token_chars": [
            "letter",
            "digit"
          ]
        }
      },
      "char_filter": {
        "replace_whitespace": {
          "type": "mapping",
          "mappings": [
            "\\u0020=>"
          ]
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "articlenumbers": {
        "type": "text",
        "fields": {
          "analyzed": {
            "type": "text",
            "analyzer": "my_analyzer"
          }
        }
      }
    }
  }
}

指数数据:

{
  "articlenumbers": "AB 987 g567 323"
}

搜索查询:

{
  "query": {
    "multi_match": {
      "query": "AB987g",
      "fields": [
        "articlenumbers",
        "articlenumbers.analyzed"
      ]
    }
  }
}

搜索结果:

"hits": [
      {
        "_index": "65936531",
        "_type": "_doc",
        "_id": "1",
        "_score": 1.4384104,
        "_source": {
          "articlenumbers": "AB 987 g567 323"
        }
      }
    ]

关于Elasticsearch:查找带空格和不带空格的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65936531/

相关文章:

python-3.x - Elasticsearch DSL或查询格式

elasticsearch - 文件节拍 : Send different logs from filebeat to different logstash Pipeline

elasticsearch - 将文件插入Elasticsearch索引中,并由分析器进行分析

java - 为什么我无法从浏览器中看到我的 js 文件 - tomcat 7

solr - Lucene - 很少或很多索引

elasticsearch - not_analyzed索引的 Elasticsearch dynamic_templates

c# - 如何将项目类型转换为共享类库类型

html - 网页顶部的空白过多

python - 如何从 Pandas DataFrame header 中去除空格?

javascript - 用 html 标签替换所有空格以包含剩余的单词