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的列表)。