2013-08-15 18 views
6

En çok kullanılan terimleri bir dizinde, yüzleri kullanarak bulabileceğinizi biliyorum. Aşağıdaki girişlere Örneğin Elasticsearch'te en çok kullanılan deyimler nasıl bulunur?

:

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

Ama bu mümkün izlediklerinizi listelemektir merak ediyorum:

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

vadeli faset bu döndürür

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

....etc... 

mi ElasticSearch'te böyle bir özellik var mı?

+2

Belki de 'shingle' analizcisini kullanan alanda özel bir analiz cihazı tanımlamayı deneyin. Bu, kelimeleri (istediğiniz gibi) birleştirerek belirteçleri oluşturacaktır. Daha sonra, fasetin bu birleşik belirteçlerin üzerindeki sayıları döndürüp döndürmeyeceğini deneyebilirsiniz. Bir [shingle belirteci filtre üzerindeki es belgelerine bakın] (http://www.elasticsearch.org/guide/reference/index-modules/analysis/shingle-tokenfilter/) – ramseykhalaf

+0

Teşekkürler, bu işe yarayabilir. Yönlendirmeler jetonları döndürür, bu yüzden büyük olasılıkla bu phrase_tokens'i de döndürür. Ancak, bu varolan dizinler için geçerli değildir ve bu dosya boyutunu çok artırır, değil mi? Her gün 5 GB veri için bu özelliğe ihtiyacım var. Ve o günden sonra artık ona ihtiyacım olmayacak. Yani, her gün sonunda 5GB veriyi indekslemek, faset sonuçlarını saklamak ve sonra yeni indeks verilerini silmek için en iyi şey sanırım. (Bu bir döngüde devam edecek) Diğer seçenekler? – shyos

+0

Yanıtın http://stackoverflow.com/questions/39380463/get-top-100-most-used-three-word-phrases-in-all-documents – AlexG

cevap

2

Ramsseykhalaf'ın yorumunda belirtildiği gibi, bir shingle filtresi "n" kelimelerinin uzunluğundaki simgeleri üretecektir.

"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" 
      } 
     } 
    } 
} 

Ayrıntılar için bu blog post adresine bakın.

+0

adresinde mevcut olduğuna inanıyorum, zona ekledim ve sanırım çalışıyor, ancak http://www.elasticsearch.org/blog/searching-with-shingles/still en çok kullanılan ifadelerin neler olduğunu bulmama izin vermiyor. http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-facets-terms-stats-facet.html nasıl bir faset ve zona kullanırız, hala tek bir kelime sonucu alırım, "{ vade: term1, count: 203} ", nasıl" {vadeli: "alırım" zona ": 5 sayı"? –

+0

Aynı sorunlarım var - Bunu henüz denemedim - ama eğer shingled alan üzerinde toplama/faceting yaparsanız bu yardımcı olur mu? Analizdeki kökten emin değilim. Örneğin, "su deliği" ve "sulama deliği" ve "sulanan delik" ler varsa, bunlar aynı olabilir ama belki de olmamalıdır. http://project.carrot2.org/index.html gerçekten bunun için hazırlandı - ama bunu sadece elastik aramada yapabilecekseniz, bu harika olurdu. – Yehosef

+0

Terimler ve Önemli terimler toplama, shingled tokenlerle çalışmaz. Henüz neden olduğunu bilmiyorum. –

0

Elasticsearch'in bunu istediğiniz gibi yapmanıza izin vereceğinden emin değilim. Ama ne istediğinizi başarmak için Carrot2 - http://project.carrot2.org/index.html'u incelemek isteyebilirsiniz (ve muhtemelen daha fazlası.)

İlgili konular