Точное упругое совпадение и совпадение подстроки вместе - PullRequest
0 голосов
/ 13 февраля 2019

Я знаю, что у Elastic есть тип "ключевое слово", чтобы найти что-то с точным соответствием.Пример:

"address":  { "type": "keyword"}

Это круто.точное совпадение работает!

но я хотел бы иметь оба" точное совпадение " и " подстрока ".Поэтому я решил создать следующее отображение:

   "address":  { "type": "text" , "index": true }

Задача Если у меня есть «текстовый» тип, как я могу найти строку с точным соответствием?(не подстрока).Я пробовал несколько способов, но это не работает:

GET testing_index/_search
{
    "query" : {
        "constant_score" : { 
            "filter" : {
                "term" : { 
                    "address" :  "washington"
                }
            }
        }
    }
}

или

GET testing_index/_search
{
  "query": {
    "match": {
      "address" : "washington"
    }
  }
}

Мне нужно просто что-то универсальное отображение:

  • , чтобы найти точную строку
  • чтобы найти подстроки

Я надеюсь, что Sharp может сделать это.

1 Ответ

0 голосов
/ 13 февраля 2019

По умолчанию в текстовых полях используется анализатор по умолчанию , который отбрасывает большинство знаков препинания, разбивает текст на отдельные слова и вводит их в нижнем регистре.Например, стандартный анализатор превращает строку «Quick Brown Fox!» В термины [quick, brown, fox].Как вы можете себе представить, это затрудняет написание запроса на точное совпадение с текстовым полем.Для вашего случая использования я предлагаю один из 2 вариантов:

  1. сохранить как keyword и выполнить сопоставление в виде строк, используя подстановочный знак или fuzzy запросы.Запросы с подстановочными знаками, в частности запросы с подстановочными знаками, известны своей медлительностью, поэтому действуйте с осторожностью.
  2. дважды сохраните поле: один как keyword, а другой как text.Очевидным недостатком здесь является раздувание размера индекса.

Дополнительные сведения см. В документации Elasticsearch «Term Query» и, в частности, в разделе «Почему запрос термина не соответствует моему документу»? ": https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-term-query.html

...