поиск эластичного поиска, где n-й символ поля соответствует параметру - PullRequest
0 голосов
/ 13 ноября 2018

У индекса Elasticsearch есть документы json, подобные этому

{
  id: ABC120379013
  name: Matlo Jonipa
  jobs: {nested data}
}

При определении схемы индекса я регистрирую идентификатор как ключевое слово.

Теперь мне нужно написать запрос, который может вернуть все документы, где 4-йchar в значении поля id является цифрой 9.

# matched docs
id: ABC920379013,
id: Zxr900013000
...

У меня есть два вопроса для этого варианта использования.

1- Правильно ли я индексирую его, когда задаю id в качестве поля ключевого слова?Я чувствую, что должен использовать какой-то анализатор, но я не знаю, какой именно.

2- Может ли кто-нибудь подсказать мне, как написать запрос, соответствующий n-му символу поля?

Я могуиспользовать это регулярное выражение для сопоставления строки, чей 4-й символ равен 9, но могу ли я использовать ее в запросе эластичного поиска?

/^...9.*$/
or
/^.{3}9.*$/

1 Ответ

0 голосов
/ 13 ноября 2018

Запрос ниже поможет вашему варианту использования. Я использовал Script Query .

Кроме того, да, вы все делаете правильно, вам нужно убедиться, что поле id будет иметь тип keyword. Обратите внимание, что тип keyword не использует analyzers.

POST regexindex/_search
{
  "query": {
        "bool" : {
            "must" : {
                "script" : {
                    "script" : {
                        "source": "doc['id'].value.indexOf('9') == 3",
                        "lang": "painless"
                     }
                }
            }
        }
    }
}

Я упомянул .indexOf('9') == 3, потому что индекс начинается с 0

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