Срок запроса не возвращает никаких результатов - PullRequest
0 голосов
/ 05 марта 2019

Я пытаюсь найти некоторые объекты в Elastic search, используя вложенный запрос запроса.Если я выполню свой поисковый запрос, хитов не будет.Но если я изменю запрос, чтобы использовать «матч» вместо «термин», у меня будут совпадения.Что я могу делать не так?

Я пытаюсь добиться того, чтобы возвращались только точные совпадения.

Сущность в ES выглядит следующим образом

"vehiclesCollection": [
    {
        "id": "c0163692-69c5-442e-a30c-a3789384904d",
        "additionalFields": {
            "23698e0d-e5ba-4c0e-9c41-09db40708f09@11b75c17-1f62-4a45-847b-    348f3e6a5485@1a61281d-73b0-41ea-964d-d869a172752d": "HaveNoIdea",
            "23698e0d-e5ba-4c0e-9c41-09db40708f09@11b75c17-1f62-4a45-847b-348f3e6a5485@91b5e07e-6e09-4a81-a3ef-d43f1ea99b34": "Strane",
            "23698e0d-e5ba-4c0e-9c41-09db40708f09@11b75c17-1f62-4a45-847b-348f3e6a5485@4fc4d50b-5c81-47f7-8c7a-7802c28c0dca": true,
            "23698e0d-e5ba-4c0e-9c41-09db40708f09@11b75c17-1f62-4a45-847b-348f3e6a5485@c35b1e06-f918-4f70-a323-804c004ddcbe": "License Plate"
        },
        "searchableAdditionalFieldValues": [
            "License Plate",
            "Strane",
            "HaveNoIdea"
        ]
    }
]

СОВЕТ: Это только часть, которую я выполняюпоиск по.

Имеет следующие сопоставления

{
  "vehiclesCollection": {
    "type": "nested",
    "properties": {
      "additionalFields": {
        "properties": {
          "23698e0d-e5ba-4c0e-9c41-09db40708f09@11b75c17-1f62-4a45-847b-348f3e6a5485@1a61281d-73b0-41ea-964d-d869a172752d": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          },
          "23698e0d-e5ba-4c0e-9c41-09db40708f09@11b75c17-1f62-4a45-847b-348f3e6a5485@4fc4d50b-5c81-47f7-8c7a-7802c28c0dca": {
            "type": "boolean"
          },
          "23698e0d-e5ba-4c0e-9c41-09db40708f09@11b75c17-1f62-4a45-847b-348f3e6a5485@91b5e07e-6e09-4a81-a3ef-d43f1ea99b34": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          },
          "23698e0d-e5ba-4c0e-9c41-09db40708f09@11b75c17-1f62-4a45-847b-348f3e6a5485@c35b1e06-f918-4f70-a323-804c004ddcbe": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          }
        }
      },
      "id": {
        "type": "keyword"
      },
      "searchableAdditionalFieldValues": {
        "type": "text",
        "index_options": "offsets",
        "analyzer": "ngram_tokenizer_analyzer",
        "search_analyzer": "whitespace_analyzer"
      }
    }
  }
}

И поисковый запрос (в котором, если термин переключается на совпадение, он будет работать, но я хочу только точные совпадения)

{
  "bool": {
    "must": [
      {
        "nested": {
          "query": {
            "term": {
              "vehiclesCollection.additionalFields.23698e0d-e5ba-4c0e-9c41-09db40708f09@11b75c17-1f62-4a45-847b-348f3e6a5485@c35b1e06-f918-4f70-a323-804c004ddcbe": {
                "value": "License Plate",
                "boost": 1
              }
            }
          },
          "path": "vehiclesCollection",
          "ignore_unmapped": false,
          "score_mode": "avg",
          "boost": 1
        }
      },
      {
        "nested": {
          "query": {
            "term": {
              "vehiclesCollection.additionalFields.23698e0d-e5ba-4c0e-9c41-09db40708f09@11b75c17-1f62-4a45-847b-348f3e6a5485@1a61281d-73b0-41ea-964d-d869a172752d": {
                "value": "HaveNoIdea",
                "boost": 1
              }
            }
          },
          "path": "vehiclesCollection",
          "ignore_unmapped": false,
          "score_mode": "avg",
          "boost": 1
        }
      },
      {
        "nested": {
          "query": {
            "term": {
              "vehiclesCollection.additionalFields.23698e0d-e5ba-4c0e-9c41-09db40708f09@11b75c17-1f62-4a45-847b-348f3e6a5485@4fc4d50b-5c81-47f7-8c7a-7802c28c0dca": {
                "value": true,
                "boost": 1
              }
            }
          },
          "path": "vehiclesCollection",
          "ignore_unmapped": false,
          "score_mode": "avg",
          "boost": 1
        }
      }
    ]
  }
}

Моя первая идея - это связано с поисковым анализом.Но я не уверен, как установить их для этого конкретного запроса.Я использую Elasticsearch Java API.

1 Ответ

0 голосов
/ 05 марта 2019

Основное правило заключается в том, что вам нужно

  • выполнить ваши term запросы в подполе .keyword
  • выполнить ваши запросы на совпадение в textполя верхнего уровня

Таким образом, ваш запрос будет (первые два вложенных term запроса используют подполе ***.keyword):

{
  "bool": {
    "must": [
      {
        "nested": {
          "query": {
            "term": {
              "vehiclesCollection.additionalFields.23698e0d-e5ba-4c0e-9c41-09db40708f09@11b75c17-1f62-4a45-847b-348f3e6a5485@c35b1e06-f918-4f70-a323-804c004ddcbe.keyword": {
                "value": "License Plate",
                "boost": 1
              }
            }
          },
          "path": "vehiclesCollection",
          "ignore_unmapped": false,
          "score_mode": "avg",
          "boost": 1
        }
      },
      {
        "nested": {
          "query": {
            "term": {
              "vehiclesCollection.additionalFields.23698e0d-e5ba-4c0e-9c41-09db40708f09@11b75c17-1f62-4a45-847b-348f3e6a5485@1a61281d-73b0-41ea-964d-d869a172752d.keyword": {
                "value": "HaveNoIdea",
                "boost": 1
              }
            }
          },
          "path": "vehiclesCollection",
          "ignore_unmapped": false,
          "score_mode": "avg",
          "boost": 1
        }
      },
      {
        "nested": {
          "query": {
            "term": {
              "vehiclesCollection.additionalFields.23698e0d-e5ba-4c0e-9c41-09db40708f09@11b75c17-1f62-4a45-847b-348f3e6a5485@4fc4d50b-5c81-47f7-8c7a-7802c28c0dca": {
                "value": true,
                "boost": 1
              }
            }
          },
          "path": "vehiclesCollection",
          "ignore_unmapped": false,
          "score_mode": "avg",
          "boost": 1
        }
      }
    ]
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...