Elasticsearch: поиск по ключевым словам, игнорируя регистр и акцент (с помощью агрегации) - PullRequest
0 голосов
/ 17 октября 2018

Я могу искать конкретные ключевые слова по индексам, например так:

GET */_search/?
{
  "query": {
    "match_all": {}
  },
  "size": 0,
  "aggs": {
    "TECH.keyword": {
      "terms": {
        "field": "TECH.keyword",
        "include": ".*mine.*",
        "order": {
          "_count": "desc"
        },
        "size": 20
      }
    }
  }
}

Используя этот запрос, я могу получить все записи, которые имеют "mine" в своих полях TECH.keyword, упорядоченные по "_count": "desc".Итак, все в порядке.

Фактическая проблема в том, что индекс может содержать mine, Mine или MINE или даже miné в TECH.keyword полях.И я хотел бы вернуть их все.

Есть ли способ поиска по ключевым словам, игнорирующий регистр и акцент?

Текущее сопоставление:

"TECH": {
  "type": "text",
  "fields": {
    "keyword": {
      "type": "keyword",
      "ignore_above": 256
    }
  }
},

1 Ответ

0 голосов
/ 17 октября 2018

Вы должны быть в состоянии сделать это с normalizer.Вы не можете использовать analyzer в keyword полях, но вы можете использовать normalizer.Позволяет использовать lowercase и asciifolding.

https://www.elastic.co/guide/en/elasticsearch/reference/6.4/normalizer.html

PUT index
{
  "settings": {
    "analysis": {
      "normalizer": {
        "my_normalizer": {
          "type": "custom",
          "char_filter": [],
          "filter": ["lowercase", "asciifolding"]
        }
      }
    }
  },
  "mappings": {
    "_doc": {
      "properties": {
        "foo": {
          "type": "keyword",
          "normalizer": "my_normalizer"
        }
      }
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...