鉴于输入“快速棕色狐狸跳”我想为单词创建所有可能的令牌组合。因此,示例字符串将被标记为
[
"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 :(得分:0)
在您的评论中,您说这里的用例是获取文档中出现的单词组合的聚合。您可以使用标准tokenizer,仍然可以获取该信息。例如,假设您拥有带有" body"的文档。字段:
1:快速的棕色狐狸跳过小狗
2:小狗吃了一些食物
所以我想你想看到类似的东西:
小狗:2 小p: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
}
...
你可以看到"小"和#34;狗"共同出现在2个文档中,"""和#34;狗"共同出现在2个文件中," dog"和"棕色"共同出现在1份文件中。当然,这仅适用于唯一共生次数。
如果你真的需要像你所描述的那样拥有令牌,我认为你必须编写代码才能做到这一点(Lucene的自定义标记器,你可以从Elasticsearch使用,或者可能更容易,一个pre - 处理步骤,添加一个“keyword
s列表”的字段。