Есть ли способ сделать эластичный поиск без учета регистра без изменения существующих документов? - PullRequest
0 голосов
/ 27 июня 2018

Позволяет ли Elasticsearch запрашивать документы без учета регистра? Или я должен сохранить их без учета регистра перед запросом? Или есть какой-то параметр, который я должен установить для всего индекса, чтобы он не учитывал регистр?

Не могли бы вы уточнить этот момент, пожалуйста?

1 Ответ

0 голосов
/ 28 июня 2018

По умолчанию поля не чувствительны к регистру из-за примененного упругого отображения.

Попробуйте ниже:

PUT myindex/doc/1
{
  "name":"TEST"
}

GET myindex/_mapping

Возвращается:

{
  "myindex": {
    "mappings": {
      "doc": {
        "properties": {
          "name": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          }          
        }
      }
    }
  }
}

Теперь, если вы сделаете запрос ниже, он вернет совпадение (обратите внимание на отображение [текст и ключевое слово]):

POST myindex/_search
{
  "query": {
    "match": {
      "name2": "test"
    }
  }
}

Теперь, если вы явно укажете индексировать поле как keyword, тогда будет выполняться поиск с учетом регистра. Попробуй ниже и посмотри; никаких результатов не вернет.

PUT myindex/_mapping/doc
{
  "properties": {
    "name2": {
      "type": "keyword"
    }
  }
}

PUT myindex/doc/1
{
  "name2":"TEST"
}


POST myindex/_search
{
  "query": {
    "match": {
      "name2": "test"
    }
  }
}

TLDR; Используйте сопоставление по умолчанию или text type-, если указать поле для индексации только keyword type, оно будет чувствительно к регистру.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...