Как найти наиболее часто используемые фразы в elasticsearch?

Я знаю, что вы можете найти наиболее часто используемые термины в указателе с использованием фасетов.

Например, на следующих входах:

"A B C" 
"AA BB CC"
"A AA B BB"
"AA B"

фасет термина возвращает это:

B:3
AA:3
A:2
BB:2
CC:1
C:1

Но мне интересно, можно ли перечислить следующее:

AA B:2
A B:1
BB CC:1

....etc...

Есть ли такая функция в ElasticSearch?


person shyos    schedule 15.08.2013    source источник
comment
Возможно, попробуйте определить собственный анализатор для поля, использующего анализатор shingle. Это создаст токены, объединив слова (как вы спрашиваете). Затем вы можете попытаться увидеть, будет ли фасет возвращать счетчики для этих комбинированных токенов. ознакомьтесь с документацией es по токен-фильтру shingle   -  person ramseykhalaf    schedule 15.08.2013
comment
Спасибо, это может сработать. Facets возвращает токены, поэтому, скорее всего, он также вернет эти фразы_токены. Но это неприменимо к существующим индексам, и это слишком сильно увеличит размер файла, верно? Мне понадобится эта функция для 5 ГБ моих данных каждый день. И после того, как этот день закончится, он мне больше не понадобится. Итак, я думаю, лучше всего индексировать эти 5 ГБ данных в конце каждого дня, сохранять результаты аспектов, а затем удалять эти новые данные индекса. (Это будет продолжаться в цикле) Любые другие варианты?   -  person shyos    schedule 15.08.2013


Ответы (2)


Как упоминалось в комментарии ramseykhalaf, галька-фильтр будет создавать токены длиной «n» слов.

"settings" : { 
   "analysis" : {
       "filter" : {
          "shingle":{
              "type":"shingle",
              "max_shingle_size":5,
              "min_shingle_size":2,
              "output_unigrams":"true"
           },
           "filter_stop":{
              "type":"stop",
              "enable_position_increments":"false"
           }
       },
       "analyzer" : {
           "shingle_analyzer" : {
               "type" : "custom",
               "tokenizer" : "whitespace",
               "filter" : ["standard," "lowercase", "shingle", "filter_stop"]
           }
       }
   }
},
"mappings" : {
   "type" : {
       "properties" : {
           "letters" : {
               "type" : "string",
               "analyzer" : "shingle_analyzer"
           }
       }
   }
}

Подробнее см. в этом сообщении в блоге.

person Scott Rice    schedule 15.08.2013
comment
я добавил черепицу и думаю, что она работает, но elasticsearch.org/blog /поиск с черепицей/до сих пор не позволяет мне узнать, какие фразы используются чаще всего. как мы используем фасет и черепицу, elasticsearch.org/guide/en/elasticsearch/reference/current/, я все равно получаю однословный результат, {term: term1, count: 203}, как мне получить {term: черепица is: count 5}? - person Titi Wangsa bin Damhore; 12.08.2014
comment
У меня те же проблемы - я еще не пробовал - но если вы выполняете агрегацию/фасетирование на черепичном поле, поможет ли это? Я просто не уверен в правильности анализа. например, если у меня есть водопой, водопой и водопой, они будут связаны с одним и тем же, но, возможно, они не должны. project.carrot2.org/index.html действительно создан для этого, но если бы вы могли только в эластичном поиске это было бы здорово. - person Yehosef; 08.02.2015
comment
Агрегирование терминов и важных терминов не работает с токенами shingled. Не знаю, почему еще. - person Thomas Decaux; 11.04.2015

Я не уверен, позволит ли elasticsearch сделать это так, как вы хотите. Но вам может быть интересно проверить Carrot2 — http://search.carrot2.org, чтобы выполнить то, что вы хотите (и, вероятно, больше.)

person Yehosef    schedule 08.02.2015
comment
текущий URL-адрес carrot2: search.carrot2.org - person vladimir.gorea; 17.04.2021