【问题标题】:Elastic Search - Query only searches 5 characters弹性搜索 - 查询只搜索 5 个字符
【发布时间】:2021-01-28 23:00:21
【问题描述】:

我有这个问题,无论我在查询中发送什么值,我都没有得到超过搜索的第五个字符的任何结果。

例子:

  • {"match": {"name": "benjami"}} - 不会返回任何结果
  • {"match": {"name": "benja"}} - 返回名称为 Benja 的结果...
  • {"match": {"name": "benjamin"}} - 返回名称为 Benjamin 的结果

索引:

“名称”:{ “类型”:“字符串”, “分析器”:“edge_ngram_analyzer” }

设置:

"analyzer": {
    "edge_ngram_analyzer":{
        "type": "custom", "tokenizer": "standard", "filter": ["lowercase","edge_ngram_filter"]}},
"filter": {
    "edge_ngram_filter":{
        "type": "edge_ngram", "min_gram": 1, "max_gram": 40}}

使用术语向量,我发现该字段的索引正确。问题在于弹性搜索没有搜索我的完整查询值。有谁知道为什么会这样?非常感谢您的帮助,我使用的是弹性搜索 5.6 版!

索引

"properties" : { "searchid": {"type": "string", "index": "not_analyzed"},
        "otherId": {"type": "string", "analyzer": "edge_ngram_analyzer"},
        "name": {"type": "string", "analyzer": "edge_ngram_analyzer"},
}

设置

"settings": {
        "number_of_replicas": 0,
        "analysis": {
            "filter": {"edge_ngram_filter": {"type": "edge_ngram", "min_gram": 2, "max_gram": 80}},
            "analyzer": {
                "edge_ngram_analyzer": {
                    "type": "custom",
                    "tokenizer": "my_tokenizer",
                    "filter": ["lowercase", "edge_ngram_filter"],
                },
                "short_edge_ngram_analyzer": {
                    "type": "custom",
                    "tokenizer": "standard",
                    "filter": ["lowercase", "edge_ngram_filter"],
                },
                "case_sensitive": {"type": "custom", "tokenizer": "whitespace", "filter": []}
            },
            "tokenizer": {
                "my_tokenizer": {
                  "type": "edge_ngram",
                  "min_gram": 2,
                  "max_gram": 40,
                  "token_chars": [
                    "letter","digit"
                  ]
                }
        },
        },
    },

查询

{'query': 
{'function_score': 
{'query': 
{'bool': {'should': [{'multi_match': {'query': 'A162412350', 'fields': ['otherId']}}}]}}, 
'functions': [{'field_value_factor': {'field': 'positionOrActive', 'modifier': 'none', 'missing': '0', 'factor': '1.1'}}], 'score_mode': 'sum', 'boost_mode': 'sum'}}, 'size': 25}

文档结果

[{u'otherId': u'A1624903499',
  u'positionOrActive': 0,
  'searchScore': 18.152431,
  u'id': 35631,,
 {u'otherId': u'A1624903783',
  u'positionOrActive': 0,
  'searchScore': 18.152431,
  u'id': 35632,
 {u'otherId': u'A1624904100',
  u'positionOrActive': 0,
  'searchScore': 18.152431,
  u'id': 35633,]

设置

{
  "issuersearch": {
    "settings": {
      "index": {
        "refresh_interval": "1s",
        "number_of_shards": "1",
        "provided_name": "issuersearch",
        "creation_date": "1602687790617",
        "analysis": {
          "filter": {
            "edge_ngram_filter": {
              "type": "edge_ngram",
              "min_gram": "2",
              "max_gram": "80"
            }
          },
          "analyzer": {
            "edge_ngram_analyzer": {
              "filter": Array[2][
                "lowercase",
                "edge_ngram_filter"
              ],
              "type": "custom",
              "tokenizer": "my_tokenizer"
            },
            "short_edge_ngram_analyzer": {
              "filter": Array[2][
                "lowercase",
                "edge_ngram_filter"
              ],
              "type": "custom",
              "tokenizer": "standard"
            },
            "case_sensitive": {
              "type": "custom",
              "tokenizer": "whitespace"
            }
          },
          "tokenizer": {
            "my_tokenizer": {
              "token_chars": Array[2][
                "letter",
                "digit"
              ],
              "min_gram": "2",
              "type": "edge_ngram",
              "max_gram": "40"
            }
          }
        },
        "number_of_replicas": "0",
        "uuid": "dexqFx32RXy-AC3HHpfElA",
        "version": {
          "created": "5060599"
        }
      }
    }
  }
}

【问题讨论】:

    标签: elasticsearch indexing elasticsearch-query


    【解决方案1】:

    这可能是由于 standard 标记器将标记拆分为空格,您需要提供完整的示例(完整索引映射、示例文档和实际结果以供您的搜索查询确认)。

    另外,希望您没有在 name 字段中使用任何 search_analyzer

    【讨论】:

    • 我还尝试使用 ngram 标记器,而不是使用适当的 ngram 大小。该文件仍然被正确索引。文本中没有空格,也没有使用搜索分析器。仍然会导致同样的问题。
    • @Dex 可以添加完整的索引映射以及示例文档和搜索查询吗?
    • 已添加!感谢您的帮助!
    • @Dex 谢谢,但是您提供的搜索查询位于 otrherId 字段上,而您提到了包含不同数据的 name 字段。你也没有提供你的样本数据。
    • 对不起!我刚刚以开头的名称字段为例。这是我在多个领域遇到的问题。这是我正在使用的字段之一的确切信息,格式为 AXXXXXXX。结果是我的文档。它们只是格式化 id 是 _id,score 是搜索分数,其他是相关字段。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-03
    • 2014-11-09
    • 1970-01-01
    相关资源
    最近更新 更多