1

鑑於輸入「快速棕色狐狸跳躍」我想創建每個可能的詞彙組合。因此,例如字符串將被標記化到Elastic tokenize into all words cominations

[ 
"quick", "quick brown", "quick fox", "quick jumped", 
"brown", "brown quick", "brown fox", "brown jumped", 
         ..., 
"jumped quick", "jumped brown", "jumped fox", "jumped" 
] 

我可以用shingle tokeniser它,但它只能通過連接相鄰方面創造了新的標記和我結束了:

[ 
"quick", "quick brown", "quick brown fox", "quick brown fox jumped", 
"brown", "brown fox", "brown fox jumped", 
"fox", "fox jumped", 
"jumped" 
] 

這是向前邁出的正確的一步但不是我尋找的東西。

+0

你能解釋一下你使用的用例嗎? – Val

+0

@Val長話短說 - 不僅僅是單一詞彙([「quick」,「brown」,「fox」,「jumped」)),而且還包括這些單詞/術語的組合 –

回答

0

在您的評論中,您說這裏的用例是獲取文檔中出現的單詞組合的聚合。您可以使用標準標記器,並仍然可以獲取該信息。例如,假設你有「身體」字段中的文件:

1:敏捷的棕色狐狸跳過了一隻小狗

2:小的狗吃一些食物

所以我想你想看到的東西,如:

的小狗:2

小:2

狗:2

的吃:1

...

然後你就可以查詢這樣的:

{ 
    "size": 0, 
    "aggs": { 
    "firstlevel": { 
     "terms": { 
     "field": "body" 
     }, 
     "aggs": { 
     "secondlevel": { 
      "terms": { 
      "field": "body" 
      } 
     } 
     } 
    } 
    } 
} 

,你會得到一個迴應如:

"aggregations": { 
    "firstlevel": { 
    "doc_count_error_upper_bound": 0, 
    "sum_other_doc_count": 1, 
    "buckets": [ 
    { 
     "key": "dog", 
     "doc_count": 2, 
     "secondlevel": { 
     "doc_count_error_upper_bound": 0, 
     "sum_other_doc_count": 1, 
     "buckets": [ 
      { 
      "key": "dog", 
      "doc_count": 2 
      }, 
      { 
      "key": "little", 
      "doc_count": 2 
      }, 
      { 
      "key": "the", 
      "doc_count": 2 
      }, 
      { 
      "key": "brown", 
      "doc_count": 1 
      } 
     ... 

你可以看到2個文檔中的「小」和「狗」並存,2個文檔中的「狗」和「狗」同時出現,1箇中的「狗」和「棕色」同時出現文件。當然這隻適用於你想獨特共同發生次數。

如果你真的需要像你描述的令牌,我認爲你必須編寫代碼來做到這一點(可以使用從Elasticsearch使用的Lucene的自定義標記器,或者可能更容易,處理步驟,添加一個字段,該字段是keyword s的列表)。