Elasticsearch Query String Query возвращает все документы - PullRequest
0 голосов
/ 29 июня 2018

У меня есть индекс с именем users

Когда я делаю запрос на http://localhost:9200/users/_search?pretty=true со следующим запросом:

curl -X GET "localhost:9200/users/_search?pretty=true" -H 'Content-Type: application/json' -d'
{
"query": {
    "query_string": {
    "query" : "firstName: Daulet"
}
}
}'

запрос возвращает двух пользователей со следующими именами:

firstName: Daulet

firstName: Daulet Nurlanuly

Как сделать так, чтобы запрос строки запроса возвращал документ с firstName: Daulet?

Я посмотрел, что Elasticsearch использует синтаксис запроса Apache Lucene и что для строгого поиска мне нужно сделать следующее, заключив запрос в кавычки следующим образом:

firstName: "Daulet"

Но оно уже заключено в кавычки

Как мне это сделать, используя только Query String Query?

** ОБНОВЛЕНИЕ **

Ответ, который я получаю, когда делаю GET-запрос на http://localhost:9200/users:

{
    "users": {
        "aliases": {},
        "mappings": {
            "userentity": {
                "properties": {
                    "firstName": {
                        "type": "text",
                        "fields": {
                            "keyword": {
                                "type": "keyword",
                                "ignore_above": 256
                            }
                        }
                    },
                    "id": {
                        "type": "long"
                    },
                    "language": {
                        "type": "text",
                        "fields": {
                            "keyword": {
                                "type": "keyword",
                                "ignore_above": 256
                            }
                        }
                    },
                    "lastName": {
                        "type": "text",
                        "fields": {
                            "keyword": {
                                "type": "keyword",
                                "ignore_above": 256
                            }
                        }
                    }
                }
            }
        },
        "settings": {
            "index": {
                "refresh_interval": "1s",
                "number_of_shards": "5",
                "provided_name": "users",
                "creation_date": "1530245236170",
                "store": {
                    "type": "fs"
                },
                "number_of_replicas": "1",
                "uuid": "IlE1Ynv2Q462LBttptVaTg",
                "version": {
                    "created": "5060999"
                }
            }
        }
    }
}

1 Ответ

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

Вы правы, что вам нужно заключить значение в двойные кавычки. Вы находитесь на правильном пути, и вам просто нужно выйти из двойных кавычек и использовать поле firstName.keyword вместо firstName, в основном так:

curl -X GET "localhost:9200/users/_search?pretty=true" -H 'Content-Type: application/json' -d'
{
"query": {
    "query_string": {
    "query" : "firstName.keyword:\"Daulet\""
}
}
}'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...