Как я могу получить внятный результат? - PullRequest
0 голосов
/ 12 мая 2019

То, что я пытаюсь сделать, это запрос к упругому поиску (версия 6.4), чтобы получить уникальный результат поиска (названный eids). Я сделал запрос, как показано ниже. Я хотел бы сначала выполнить текстовый поиск по обоим полям, которые называются eLabel и pLabel, и получить отчетливый результат, который называется eid. Но на самом деле результат не агрегируется, показывая избыточные идентификаторы от 0 до более 20. Как я могу настроить запрос?

{
  "query": {
    "multi_match": {
      "query": "Brazil Capital",
      "fields": [
        "eLabel",
        "pLabel"
      ]
    }
  },
  "size": 200,
  "_source": [
    "eid",
    "eLabel"
  ],
  "aggs": {
    "eids": {
      "terms": {
        "field": "eid"
      }
    }
  }
}

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

  • Ид: идентификатор сущности
  • eLabel: ярлык объекта (например, Бразилия)
  • prop_id: идентификатор свойства объекта (eid)
  • pLabel: метка собственности (например, столица, расположена в ...)
  "mappings": {
    "entity": {
      "properties": {
        "eLabel": {
          "type": "text" ,
          "index_options": "docs" ,
          "analyzer": "my_analyzer"
        } ,
        "eid": {
          "type": "keyword"
        } ,
        "subclass": {
          "type": "boolean"
        } ,
        "pLabel": {
          "type": "text" ,
          "index_options": "docs" ,
          "analyzer": "my_analyzer"
        } ,
        "prop_id": {
          "type": "keyword"
        } ,
        "pType": {
          "type": "keyword"
        } ,
        "way": {
          "type": "keyword"
        } ,
        "chain": {
          "type": "integer"
        } ,
        "siteKey": {
          "type": "keyword"
        },
        "version": {
          "type": "integer"
        },
        "docId": {
          "type": "integer"
        }
      }
    }
  }

1 Ответ

0 голосов
/ 15 мая 2019

Исходя из вашего комментария, вы можете использовать следующий запрос, используя Bool .Не думайте, что с запросом агрегации что-то не так, просто замените запрос, который я упомянул, и я думаю, что этого будет достаточно.

Когда вы используете запрос multi_match , он будет извлекаться, даже если документ имеет eLabel = "Rio is capital of brazil" & pLabel = "something else entirely here"

POST <your_index_name>/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "eLabel": "capital"
          }
        },
        {
          "match": {
            "pLabel": "brazil"
          }
        }
      ]
    }
  },
  "size": 200,
  "_source": [
    "eid",
    "eLabel"
  ],
  "aggs": {
    "eids": {
      "terms": {
        "field": "eid"
      }
    }
  }
}

Обратите внимание, что если вы хотите толькозначения eid и не нужны документы, вы можете установить "size":0 в приведенном выше запросе.Таким образом вы получите только результаты агрегации.

Дайте мне знать, если это поможет !!

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