Советчик завершения Не работает должным образом

{
"settings": {
    "analysis": {
        "filter": {
            "autocomplete_filter": {
                "type": "edgeNGram",
                "min_gram": 1,
                "max_gram": 20
            }
        },
        "analyzer": {
            "autocomplete": {
                "type": "custom",
                "tokenizer": "whitespace",
                "filter": [
                    "lowercase",
                    "autocomplete_filter"
                ]
            }
        }
    }
},
"mappings": {
    "test": {
        "properties": {
            "suggest": {
                "type": "completion",
                "analyzer": "autocomplete"
            },
            "hostname": {
                "type": "text"
            }
        }
    }
}

} `

Вышеупомянутое сопоставление сохраняется в эластичном поиске.

POST index/test { "hostname": "testing-01", "suggest": [{"input": "testing-01"}] } POST index/test { "hostname": "testing-02", "suggest": [{"input":"testing-02"}] } POST index/test { "hostname": "w1-testing-01", "suggest": [{"input": "w1-testing-01"}] } Индекс POST / тест { "hostname": "w3-testing-01", "предложение": [{"ввод": "w3-testing-01"}] } ` Когда есть 30 документов с именем хоста, начинающимся с w1, и именами хоста w3, при поиске термина «w3» я получаю сначала предложения всех w1, а затем w3. Предложение Запрос

{
"query": {
    "_source": {
        "include": [
            "text"
        ]
    },
    "suggest": {
        "server-suggest": {
            "text": "w1",
            "completion": {
                "field": "suggest",
                "size": 10
            }
        }
    }
}

}

Пробовал разные анализаторы, та же проблема. может какое-нибудь тело руководство?

1
0
996
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это обычная ловушка. Это потому, что min_ngram равен 1, и, следовательно, и w1-testing-01, и w3-testing-01 будут производить токен w. Поскольку вы указали только analyzer, анализатор autocomplete также включится во время поиска, и, следовательно, предложения поиска для w3 также будут выдавать токен w, поэтому оба w1-testing-01 и w3-testing-01 совпадают.

Решение состоит в том, чтобы добавить search_analyzer в ваше поле suggest, чтобы анализатор autocomplete не использовался во время поиска (вы можете использовать standard, keyword или любой другой анализатор, подходящий для вашего варианта использования), но только во время индексации.

  "mappings": {
    "test": {
      "properties": {
        "suggest": {
          "type": "completion",
          "analyzer": "autocomplete",
          "search_analyzer": "standard"        <-- add this
        },
        "hostname": {
          "type": "text"
        }
      }
    }
  }

Если имеется 30 документов, начинающихся как с w1, так и с w3, результаты все равно начинаются с w1. Нам нужны предложения, в том числе хифенс. Стандартный анализатор не включает бедра. Что ты предлагаешь ?

Tech_Lover 02.05.2018 15:01

Честно говоря, анализатор standard отбрасывает дефисы, тогда используйте анализатор keyword.

Val 02.05.2018 15:06

Спасибо, Вэл. Я обновлю отображение и повторно проиндексирую данные.

Tech_Lover 02.05.2018 15:15

Теперь он работает так, как ожидалось. Токенизатор для анализатора автозаполнения заменен на пробел. Спасибо, yoou Val!

Tech_Lover 02.05.2018 16:46

Отлично, рад, что помог!

Val 02.05.2018 16:46

Другие вопросы по теме