Подстановочный запрос Elastic Search не работает с учетом регистра (для строчных букв) - PullRequest
0 голосов
/ 12 июня 2018

Я пытаюсь получить записи из эластичного поиска, используя подстановочные запросы.

Найдите приведенный ниже запрос

get my_index12/_search
{ 
  "query": { 
  "wildcard": { 
  "code.keyword": { 
          "value": "*ARG*" 
        } 
    } 
  } 
}

Он работает и дает ожидаемые результаты для вышеуказанного запроса., Но этоне работает для нижнего регистра значения.

get my_index12/_search
{ 
  "query": { 
  "wildcard": { 
  "code.keyword": { 
          "value": "*Arg*" 
        } 
    } 
  } 
}

Ответы [ 2 ]

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

Попробуйте следующее:

Отображение:

PUT my_index12
{
"settings": {
"analysis": {
  "analyzer": {
    "custom_analyzer": {
      "type": "custom",
      "tokenizer": "whitespace",
      "char_filter": [
        "html_strip"
      ],
      "filter": [
        "lowercase",
        "asciifolding"
      ]
    }
   }
  }
},
"mappings": {
"doc": {
  "properties": {
    "code": {
      "type": "text",
       "analyzer": "custom_analyzer"
      }
    }
  }
 }
}

Затем выполните Query String Запрос

GET my_index12/_search
{
"query": {
"query_string": {
  "default_field": "code",
  "query": "AB\\-7000*"
    }
  }
}

Это также будет работать для ab-7000*

Дайте мне знать, если это работает для вас.

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

Необходимо нормализовать поле ключевого слова:

Нормализатор ElasticSearch

Что-то вроде (из документации):

PUT index
 {
  "settings": {
    "analysis": {
    "normalizer": {
       "my_normalizer": {
       "type": "custom",
       "char_filter": [],
       "filter": ["lowercase", "asciifolding"]
     }
   }
 }
},
"mappings": {
  "_doc": {
    "properties": {
      "foo": {
        "type": "keyword",
        "normalizer": "my_normalizer"
      }
    }
   }
  }
}

ОБНОВЛЕНИЕ Некоторая дополнительная информация:

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

Если для analyz_wildcard задано значение true,запросы, заканчивающиеся *, будут проанализированы, и из различных токенов будет построен логический запрос, обеспечив точное совпадение на первых токенах N-1 и совпадение префикса на последнем токене.

...