Возврат документов, соответствующих запросам нескольких строк с подстановочными знаками - PullRequest
2 голосов
/ 09 июля 2020

Я новичок в Elasticsearch и буду очень признателен за помощь в этом

В запросе ниже я хочу, чтобы был возвращен только первый документ, но вместо этого возвращаются оба документа. Как я могу написать запрос для поиска двух строк с подстановочными знаками в двух отдельных полях, но возвращать только те документы, которые совпадают?

Я думаю, что то, что возвращается в настоящее время, зависит от оценки, но мне не нужна оценка.

POST /pr/_doc/1
{
  "type": "Type ONE",
  "currency":"USD"
}

POST /pr/_doc/2
{
  "type": "Type TWO",
  "currency":"USD"
}

GET /pr/_search
{
  "query": {
      "bool": {
        "must": [
          {
            "simple_query_string": {
              "query": "Type ON*",
              "fields": ["type"],
              "analyze_wildcard": true
            }
          },
          {
            "simple_query_string": {
              "query": "US*",
              "fields": ["currency"],
              "analyze_wildcard":true
            }
          }
        ]
    }
  }
}

1 Ответ

2 голосов
/ 09 июля 2020

Используйте запрос ниже, в котором используются строки запроса default_operator: AND и для более подробной информации и дальнейшего чтения.

Поисковый запрос

{
  "query": {
    "query_string": {
      "query": "(Type ON*) AND (US*)",
      "fields" : ["type", "currency"],
      "default_operator" : "AND"
    }
  }
}

Проиндексируйте образцы документов, и он вернет ожидаемое значение * только 1015 *:

"hits": [
      {
        "_index": "multiplequery",
        "_type": "_doc",
        "_id": "1",
        "_score": 2.1823215,
        "_source": {
          "type": "Type ONE",
          "currency": "USD"
        }
      }
    ]
...