Не в состоянии написать запрос с подстановочными знаками для ElasticSearch?
Я столкнулся с проблемой с использованием подстановочного знака. Всякий раз, когда я пытаюсь найти данные, используя подстановочный знак, он возвращает ошибку
Набор данных выглядит следующим образом в ES:
"hits": {
"total": 1000,
"max_score": 1,
"hits": [
{
"_index": "accounts",
"_type": "data",
"_id": "25",
"_score": 1,
"_source": {
"account_number": 25,
"balance": 40540,
"firstname": "Virginia",
"lastname": "Ayala",
"age": 39,
"gender": "F",
"address": "171 Putnam Avenue",
"employer": "Filodyne",
"email": "[email protected]",
"city": "Nicholson",
"state": "PA"
}
}
И я использую следующий запрос:
GET /_search
{
"query":{
"filtered" : {
"filter" : {
"bool" : {
"should" :
{
"match":{
"wildcard":{"lastname" : "Aya*" }
}
}
}
}
}
}
}
Но выдает следующую ошибку:
{
"error": {
"root_cause": [
{
"type": "query_parsing_exception",
"reason": "[match] query does not support [lastname]",
"index": "accounts",
"line": 9,
"col": 25
}
Я пытался без экземпляра соответствия, используя только подстановочный знак в запросе, но все же я не могу получить данные. Поиск здесь успешен, но данные не возвращаются.
Без запроса на совпадение:
GET /_search
{
"query":{
"filtered" : {
"filter" : {
"bool" : {
"should" :
{
"wildcard":{"lastname" : "Aya*" }
}
}
}
}
}
}
Пожалуйста, помогите мне понять, как я должен подготовить запрос. Я должен использовать эту строку запроса в JAVA API, а также. Таким образом, любой совет по этому вопросу также будет очень полезным.
2 ответа
Я угадываю твои lastname
поле, вероятно, analyzed
и, таким образом, токен, который был проиндексирован, ayala
и не Ayala
, Так как wildcard
запросы не анализируются, необходимо указать поисковый запрос в нижнем регистре:
Попробуй это:
POST /_search
{
"query":{
"filtered" : {
"filter" : {
"bool" : {
"should" :
{
"wildcard":{"lastname" : "aya*" }
}
}
}
}
}
}
Это сработало для меня:
GET /_search
{
"query": {
"wildcard": {
"lastname": "aya*"
}
}
}
Я потратил много времени на это, пока не прочитал это онлайн:
...if you search a not_analyzed field and use wildcards, you MUST NOT include any capital letters in your query...
Все время это не работало, потому что я искал, например, Aya*
, Как только я перевел его в нижний регистр aya*
это сработало.