Elasticsearch-无法使用建议字段(“不是完成建议字段”)进行搜索

时间:2019-03-21 16:11:29

标签: elasticsearch autocomplete

我是Elasticsearch的新手,我试图在一个名为“ identity.full_name”,index =“ search”和type =“ person”的现有字段上使用elasticsearch完成建议程序。 我按照下面的索引更改了字段的映射。

1)

POST /search/_close

2)

POST search/person/_mapping
{
    "person": {
      "properties": {
        "identity.full_name": {
          "type": "text",
          "fields":{
            "suggest":{
              "type":"completion"
            }
          }
        }
        }
      }
    }

3)

POST /search/_open

当我此时检查映射时,使用

GET search/_mapping/person/field/identity.full_name

我得到结果,

{
  "search": {
    "mappings": {
      "person": {
        "identity.full_name": {
          "full_name": "identity.full_name",
          "mapping": {
            "full_name": {
              "type": "text",
              "fields": {
                "completion": {
                  "type": "completion",
                  "analyzer": "simple",
                  "preserve_separators": true,
                  "preserve_position_increments": true,
                  "max_input_length": 50
                },
                "keyword": {
                  "type": "keyword",
                  "ignore_above": 256
                },
                "suggest": {
                  "type": "completion",
                  "analyzer": "simple",
                  "preserve_separators": true,
                  "preserve_position_increments": true,
                  "max_input_length": 50
                }
              }
            }
          }
        }
      }
    }
  }
}

建议将其更新为完成字段。

但是,当我查询使用此方法是否可以正常工作时,

GET search/person/_search
{
    "suggest": {
        "person-suggest" : {
            "prefix" : "EMANNUEL",
            "completion" : {
                "field" : "identity.full_name"
            }
        }
    }
}

这给我错误“字段[identity.full_name]不是完成建议字段”

我不确定为什么会出现此错误。还有什么我可以尝试的吗?

样本数据:

  {
    "_index": "search",
    "_type": "person",
    "_id": "3106105149",
    "_score": 1,
    "_source": {
      "identity": {
        "id": "3106105149",
        "first_name": "FLORENT",
        "last_name": "TEBOUL",
        "full_name": "FLORENT TEBOUL"
        }
        }
        }

  {
    "_index": "search",
    "_type": "person",
    "_id": "125296353",
    "_score": 1,
    "_source": {
      "identity": {
        "id": "125296353",
        "first_name": "CHRISTINA",
        "last_name": "BHAN",
        "full_name": "CHRISTINA K BHAN"
        }
        }
        }

所以当我基于前缀“ CHRISTINA”进行GET操作

获取搜索/人/ _搜索

{
    "suggest": {
        "person-suggest" : {
            "prefix" : "CHRISTINA",
            "completion" : {
                "field" : "identity.full_name.suggest"  
                }
            }
        }
    }

我正在获得所有结果,例如match_all查询。

1 个答案:

答案 0 :(得分:0)

您应该像使用它

GET search/person/_search

    {
        "suggest": {
            "person-suggest" : {
                "prefix" : "EMANNUEL",
                "completion" : {
                    "field" : "identity.full_name.suggest"
                }
            }
        }
    }

映射获取搜索/ _映射/人/字段/身份。全名

{
  "search" : {
    "mappings" : {
      "person" : {
        "identity.full_name" : {
          "full_name" : "identity.full_name",
          "mapping" : {
            "full_name" : {
              "type" : "text",
              "fields" : {
                "suggest" : {
                  "type" : "completion",
                  "analyzer" : "simple",
                  "preserve_separators" : true,
                  "preserve_position_increments" : true,
                  "max_input_length" : 50
                }
              }
            }
          }
        }
      }
    }
  }
}