Как искать агрегаты в ES? - PullRequest
       6

Как искать агрегаты в ES?

0 голосов
/ 26 сентября 2018

У меня есть индекс книг, который содержит массив тегов (с обоими типами текста / ключевых слов), я хотел бы предложить автозаполнение для тегов, чтобы пользователи вводили «ro», и он возвращал «романс» или «рок-н-ролл»".

Вот мое отображение:

/books {
 ...
  tags: {
    type: 'text',
    field: {
      keyword: {type: 'keyword'}
    }
  }
}

Пример книги

{ name: "foo", tags: ['romance', 'story', 'fiction'] }

Мое агрегирование по тегам:

      {
      size: 0,
      aggregations: {
        options: {
          terms: {
            field: `tags.keyword`,
            size: 20
          }
        }
      }

Как я могу толькополучить все различные теги, которые соответствуют "ro"?

1 Ответ

0 голосов
/ 26 сентября 2018

Просто попробуйте:

GET book/_search
{
  "query": {
    "prefix": {
      "tags.keyword": "ro"
    }
  }, "size": 0,
  "aggs": {
    "options": {
      "terms": {
        "field": "tags.keyword",
        "size": 20
      }
    }
  }
}

Но для вашего случая использования я предлагаю вам создать собственный анализатор с фильтром ngram, например:

    "tags": {
      "type": "text",
      "analyzer": "english_custom",
      "fields": {
        "suggester": {
          "type": "text",
          "analyzer": "autocomplete",
          "search_analyzer": "standard"
        },
        "keyword":{
                   "type": "keyword" }
      } 

Анализатор автозаполнения должен бытьчто-то вроде этого:

 {"filter":{
     ....

    "autocomplete_filter": {
      "type": "edge_ngram",
      "min_gram": 2,
      "max_gram": 8
    }
  },
  "analyzer": {
    "autocomplete": {
      "type": "custom",
      "tokenizer": "standard",
      "filter": [
        "lowercase",
        "autocomplete_filter"
      ]
    } 
   }

РЕДАКТИРОВАТЬ: Не могли бы вы поиграть с предложением включения в терминах агрегации?

GET /_search
{
    "aggs" : {
        "tags" : {
            "terms" : {
                "field" : "tags.keyword",
                "include" : "ro.*"
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...