2013-08-15 29 views
6

Tôi biết rằng bạn có thể tìm thấy hầu hết các cụm từ được sử dụng trong chỉ mục có sử dụng các khía cạnh.Cách tìm các cụm từ được sử dụng nhiều nhất trong elasticsearch?

Ví dụ đầu vào sau:

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

hạn khía cạnh trả về này:

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

Nhưng tôi tự hỏi rằng là nó có thể liệt kê sau:

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

....etc... 

Is có một tính năng như vậy trong ElasticSearch?

+2

Có thể thử xác định bộ phân tích tùy chỉnh trên trường sử dụng trình phân tích 'shingle'. Điều này sẽ tạo ra các thẻ bằng cách kết hợp các từ (như bạn đang hỏi). Sau đó, bạn có thể thử xem liệu khía cạnh sẽ trả về số lượng trên các mã thông báo kết hợp này hay không. Có một [xem các tài liệu es trên bộ lọc mã thông báo shingle] (http://www.elasticsearch.org/guide/reference/index-modules/analysis/shingle-tokenfilter/) – ramseykhalaf

+0

Cảm ơn, điều này có thể làm việc. Facets trả về mã thông báo, vì vậy hầu hết có thể nó cũng trả về các cụm từ này. Nhưng, điều này không áp dụng cho các chỉ mục hiện có và điều này sẽ làm tăng kích thước tệp quá nhiều, phải không ?. Tôi sẽ cần tính năng này cho trên 5 GB dữ liệu của tôi mỗi ngày. Và sau ngày đó kết thúc tôi sẽ không còn cần nó nữa. Vì vậy, tôi đoán điều tốt nhất để làm chỉ mục rằng 5GB dữ liệu vào cuối mỗi ngày, lưu trữ các kết quả khía cạnh và sau đó xóa dữ liệu chỉ mục mới. (Điều này sẽ tiếp tục trong vòng lặp) Bất kỳ tùy chọn nào khác? – shyos

+0

Tôi tin rằng câu trả lời có sẵn tại http://stackoverflow.com/questions/39380463/get-top-100-most-used-three-word-phrases-in-all-documents – AlexG

Trả lời

2

Như đã đề cập trong nhận xét của ramseykhalaf, một bộ lọc ván lợp sẽ tạo ra các thẻ có độ dài "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" 
      } 
     } 
    } 
} 

Xem này blog post để biết chi tiết đầy đủ.

+0

tôi đã thêm bệnh zona và tôi nghĩ rằng đang hoạt động, nhưng http://www.elasticsearch.org/blog/searching-with-shingles/still không cho phép tôi tìm ra cụm từ được sử dụng nhiều nhất. làm thế nào để chúng tôi sử dụng một khía cạnh và bệnh zona, http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-facets-terms-stats-facet.html, tôi vẫn nhận được một kết quả từ, "{ term: term1, count: 203} ", làm thế nào để tôi nhận được" {term: "shingles là": count 5} "? –

+0

Tôi có cùng một vấn đề - tôi chưa thử điều này - nhưng nếu bạn thực hiện tổng hợp/faceting trên trường shingled có giúp được không ?. Tôi không chắc chắn về sự xuất hiện trong phân tích. ví dụ, nếu tôi có "lỗ nước" và "lỗ tưới nước" và "lỗ tưới" thì những thứ đó sẽ xuất hiện giống nhau nhưng có lẽ không nên. http://project.carrot2.org/index.html thực sự được thực hiện cho điều này - nhưng nếu bạn có thể làm điều đó trong tìm kiếm đàn hồi một mình sẽ là tuyệt vời. – Yehosef

+0

Điều khoản và tập hợp các thuật ngữ quan trọng không hoạt động với các mã thông báo bị lỗi. Không biết tại sao. –

0

Tôi không chắc chắn nếu elasticsearch sẽ cho phép bạn làm điều này theo cách bạn muốn nguyên bản. Nhưng bạn có thể quan tâm đến việc kiểm tra Carrot2 - http://project.carrot2.org/index.html để hoàn thành những gì bạn muốn (và có thể nhiều hơn nữa.)