Elasticsearch - Изюминка поиска по шаблону - PullRequest
0 голосов
/ 28 января 2019

Я обнаружил, что поведение выделения группового символа немного отличается.Когда я выполняю поиск с использованием одного "", то есть символа подстановки, оно не выделяет ни одно из значений.Но если я сделаю то же самое, используя два или более символа "", то есть подстановочный знак, он выделяет все значения.Хотя полученные результаты одинаковы, почему такая разница в освещении?пример:

1.Несколько подстановочных знаков

{
  "from": 0,
  "size": 10,
  "_source": {
    "includes": [
      "ID"
    ]
  },
  "query": {
    "bool": {
      "should": [
        {
          "bool": {
            "must": [
              {
                "query_string": {
                  "query": "**",
                  "fields": [
                    "ID"
                  ]
                }
              }
            ]
          }
        }
      ],
      "minimum_should_match": 1
    }
  },
  "highlight": {
    "type": "unified",
    "fragment_size": 0,
    "order": "score",
    "number_of_fragments": 4,
    "fields": {
      "*": {}
    }
  }
}

Результаты:

{
  "_index": "index_name",
  "_type": "_doc",
  "_id": "AUTO",
  "_score": 1,
  "_source": {
    "ID": "AUTO"
  },
  "highlight": {
    "ID": [
      "<em>AUTO</em>"
    ]
  }
}

2.Подстановочный знак:

{
  "from": 0,
  "size": 10,
  "_source": {
    "includes": [
      "ID"
    ]
  },
  "query": {
    "bool": {
      "should": [
        {
          "bool": {
            "must": [
              {
                "query_string": {
                  "query": "*",
                  "fields": [
                    "ID"
                  ]
                }
              }
            ]
          }
        }
      ],
      "minimum_should_match": 1
    }
  },
  "highlight": {
    "type": "unified",
    "fragment_size": 0,
    "order": "score",
    "number_of_fragments": 4,
    "fields": {
      "*": {}
    }
  }
}   

Результаты:

{
  "_index": "index_name",
  "_type": "_doc",
  "_id": "AUTO",
  "_score": 1,
  "_source": {
    "ID": "AUTO"
  }
}

Ответы [ 2 ]

0 голосов
/ 28 января 2019

Пожалуйста, ознакомьтесь с документацией Query String Query .Существует:

Чистые шаблоны \* переписаны для exists запросов для повышения эффективности.Как следствие, подстановочный знак "field:*" будет сопоставлять документы с пустым значением, подобным следующему: { "field": "" } ..., и не будет совпадать, если поле отсутствует или имеет явное нулевое значение, подобное следующему: { "field": null }

Так что я предполагаю, что единственное число * трактуется особым образом из-за этого.

0 голосов
/ 28 января 2019

У меня нет прямого ответа на ваш вопрос о том, почему эти запросы ведут себя по-разному.Но вместо этого вы можете использовать подстановочный запрос.

{
  "_source": {
    "includes": [
      "ID"
    ]
  },
  "query": {
    "bool": {
      "should": [
        {
          "bool": {
            "must": [
              {
                "wildcard": {
                  "ID": "*"
                }
              }
            ]
          }
        }
      ],
      "minimum_should_match": 1
    }
  },
  "highlight": {
    "type": "unified",
    "fragment_size": 0,
    "order": "score",
    "number_of_fragments": 4,
    "fields": {
      "*": {}
    }
  }
}

Надеюсь, это поможет.

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