弹性搜索-查询仅搜索5个字符

问题描述

我遇到这个问题,无论我在查询中发送什么值,在搜索到第五个字符后都不会得到任何结果。

示例:

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

索引:

名称”:{ “ type”:“ string”, “ analyzer”:“ 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",}

设置

"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","edge_ngram_filter"],},"short_edge_ngram_analyzer": {
                    "type": "custom","case_sensitive": {"type": "custom","tokenizer": "whitespace","filter": []}
            },"tokenizer": {
                "my_tokenizer": {
                  "type": "edge_ngram","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'id': 35632,{u'otherId': u'A1624904100',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","tokenizer": "standard"
            },"case_sensitive": {
              "type": "custom","tokenizer": "whitespace"
            }
          },"tokenizer": {
            "my_tokenizer": {
              "token_chars": Array[2][
                "letter","digit"
              ],"type": "edge_ngram","max_gram": "40"
            }
          }
        },"number_of_replicas": "0","uuid": "dexqFx32RXy-AC3HHpfElA","version": {
          "created": "5060599"
        }
      }
    }
  }
}

解决方法

这可能是由于standard令牌生成器将空格上的令牌拆分而引起的,您需要提供完整的示例(全索引映射,示例文档以及搜索查询的实际结果以确认它)。

另外,希望您在name字段上不要使用任何search_analyzer

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...