Подсчитать общее количество слов всех документов, указывающих на конкретные поля - PullRequest
0 голосов
/ 10 октября 2019

Кто-то задал этот вопрос, но никто, кажется, не ответил и не попытался предложить возможные пути его решения: https://discuss.elastic.co/t/count-the-number-of-words-in-the-field-elastic-search-6-2/121373

Теперь я пытаюсь создать отчет Elasticsearch для подсчета числа WORDS / TOKENS из определенного поля с именем title и content

Есть ли для этого правильный aggregation?

Например, у меня есть этот запрос:

GET web/_search
{
  "query":{
     "bool":{
        "must":[
           {
              "query_string":{
                 "fields":[
                    "title",
                    "content"
                 ],
                 "query":"((\"Hello\") AND (\"World\")"
              }
           },
           {
              "range":{
                 "pub_date":{
                    "from":1569456000,
                    "to":1570060800
                 }
              }
           }
        ]
     }
  }
}

И, например, этот запрос произвел 23 ДОКУМЕНТОВ , я хочу сделать ответ, говорящий мне, как MANY словСодержатся ли эти 23 документа на основе полей title и content ?

Ответы [ 2 ]

1 голос
/ 10 октября 2019

Я бы использовал token_count тип данных . В своем индексе вы можете добавить подполе типа token_count к полям title и content, например:

PUT web
{
  "mappings": {
      "properties": {
        "title": {
          "type": "text",
          "fields": {
            "length": {
              "type": "token_count",
              "analyzer": "standard"
            }
          }
        },
        "content": {
          "type": "text",
          "fields": {
            "length": {
              "type": "token_count",
              "analyzer": "standard"
            }
          }
        }
      }
    }
}

Затем, чтобы узнать количество токеновВы можете просто запустить агрегацию sum в подполе .length, например:

POST web/_search
{
  "size": 0,
  "aggs": {
    "title_tokens": {
      "sum": {
        "field": "title.length"
      }
    },
    "content_tokens": {
      "sum": {
        "field": "content.length"
      }
    }
  }
}
0 голосов
/ 10 октября 2019

Я использую тип данных с именем token_count Он будет рассчитывать и хранить количество токенов для каждого текста. Это значение счетчика можно использовать для получения количества токенов полей

PUT index18
{
  "mappings": {
    "properties": {
      "title": {
        "type": "text",
        "fields": {
          "keyword": {
            "type": "keyword"
          },
          "length": {
            "type": "token_count",
            "analyzer": "standard"
          }
        }
      },
      "content": {
        "type": "text",
        "fields": {
          "keyword": {
            "type": "keyword"
          },
          "length": {
            "type": "token_count",
            "analyzer": "standard"
          }
        }
      }
    }
  }
}

Данные:

"hits" : [
      {
        "_index" : "index18",
        "_type" : "_doc",
        "_id" : "edJPtW0BVHM68p7X-Wlu",
        "_score" : 1.0,
        "_source" : {
          "title" : "Mayor Isko"
        }
      },
      {
        "_index" : "index18",
        "_type" : "_doc",
        "_id" : "etJQtW0BVHM68p7XGmmr",
        "_score" : 1.0,
        "_source" : {
          "title" : "Isko"
        }
      }
    ]

Запрос

GET index18/_search
{
  "query": {"match_all": {}},
  "aggs": {
    "WordCount": {
      "sum": {
        "field": "title.length"
      }
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...