Во-первых, вам нужно определить правильное отображение вашего индекса. Ваши customer_acct
и ssn_number
имеют числовой тип c, но вы сохраняете их как строку. Также, глядя на ваш образец, я вижу, что вы должны использовать long
для их хранения. и тогда вы можете просто использовать контекст фильтра в своем запросе, так как вам не нужны оценка и релевантность в вашем результате. Подробнее о контексте фильтра читайте в официальном ES do c, а также в приведенном ниже фрагменте ссылки.
В контексте фильтра предложение запроса отвечает на вопрос «Делает ли это документ соответствует этому условию запроса? » Ответ прост: да или нет - баллы не рассчитываются. Контекст фильтра в основном используется для фильтрации структурированных данных,
, что в точности соответствует вашему варианту использования.
1. Отображение индекса
{
"mappings": {
"properties": {
"customer_acct": {
"type": "long"
},
"ssn_number" :{
"type": "long"
},
"name" : {
"type": "text"
},
"city" :{
"type": "text"
}
}
}
}
2. Индекс образца документов
{
"name": "Smithe John",
"city": "SF",
"customer_acct": 64876457065,
"ssn_number": 123456790
}
{
"name": "Julie",
"city": "NY",
"customer_acct": 64876457056,
"ssn_number": 123456789
}
3. Основной поисковый запрос для фильтрации без оценки
{
"query": {
"bool": {
"filter": [ --> only filter clause
{
"term": {
"customer_acct": 64876457056
}
},
{
"term": {
"ssn_number": 123456789
}
}
]
}
}
}
Приведенный выше поисковый запрос дает следующий результат:
{
"took": 186,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 1,
"relation": "eq"
},
"max_score": 0.0,
"hits": [
{
"_index": "so-master",
"_type": "_doc",
"_id": "1",
"_score": 0.0, --> notice score is 0.
"_source": {
"name": "Smithe John",
"city": "SF",
"customer_acct": 64876457056,
"ssn_number": 123456789
}
}
]
}
}