Вложенные «точечные» поля на подсказке завершения - PullRequest
0 голосов
/ 19 марта 2019

Я хотел бы использовать вложенное поле «точка» в качестве ключа для подсказки завершения (используя ElasticSearch 6.4).Это прекрасно работает:

PUT music/_doc/1?refresh
{
    "suggest.music" : {
        "input": [ "Nevermind", "Nirvana" ],
        "weight" : 34
    }
}

... но этот запрос на предложение не работает:

POST music/_search?pretty
{
    "suggest": {
        "song-suggest" : {
            "prefix" : "nir", 
            "completion" : { 
                "field" : "suggest.music" 
            }
        }
    }
}

Он говорит: «Не найдено сопоставление для поля [offer.music]».Вот мое отображение:

{
  "music" : {
    "aliases" : { },
    "mappings" : {
      "_doc" : {
        "properties" : {
          "es_suggest" : {
            "type" : "completion",
            "analyzer" : "simple",
            "preserve_separators" : true,
            "preserve_position_increments" : true,
            "max_input_length" : 50
          },
          "suggest" : {
            "properties" : {
              "music" : {
                "properties" : {
                  "input" : {
                    "type" : "text",
                    "fields" : {
                      "keyword" : {
                        "type" : "keyword",
                        "ignore_above" : 256
                      }
                    }
                  },
                  "weight" : {
                    "type" : "long"
                  }
                }
              }
            }
          },
          "title" : {
            "type" : "keyword"
          }
        }
      }
    },
    "settings" : {
      "index" : {
        "creation_date" : "1550842862212",
        "number_of_shards" : "5",
        "number_of_replicas" : "1",
        "uuid" : "Dqr3XQJWTqC5YRvJjEvh5w",
        "version" : {
          "created" : "6060099"
        },
        "provided_name" : "music"
      }
    }
  }
}

Есть ли способ запросить предложение о завершении с вложенным полем «точка»?

1 Ответ

1 голос
/ 20 марта 2019

Вы пытаетесь заполнить поле, suggest.music, которое не является полем заполнения. В вашем отображении es_suggest - это поле завершения.

Вы можете изменить отображение, чтобы иметь поле завершения во вложенном объекте, если хотите:

PUT music
{
  "aliases" : { },
  "mappings" : {
    "_doc" : {
      "properties" : {
        "suggest" : {
          "properties" : {
            "music" : {
              "properties" : {
                "input" : {
                  "type" : "text",
                  "fields" : {
                    "keyword" : {
                      "type" : "keyword",
                      "ignore_above" : 256
                    },
                    "completion": {
                      "type": "completion",
                      "analyzer" : "simple",
                      "preserve_separators" : true,
                      "preserve_position_increments" : true,
                      "max_input_length" : 50
                    }
                  }
                }
              }
            }
          }
        },
        "title" : {
          "type" : "keyword"
        }
      }
    }
  }
}

Затем вы можете использовать поле для заполнения:

POST music/_search
{
  "suggest": {
    "song-suggest" : {
      "prefix" : "nir", 
      "completion" : { 
        "field" : "suggest.music.input.completion" 
      }
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...