如何在 Elasticsearch 中建立 N-Gram 关系
How to build an N-Gram relationship in Elasticsearch
我是 Elasticsearch 的新手,我希望构建一个包含谚语列表的前端应用程序。当用户浏览这些谚语时,我希望他们从谚语数据库中找到相关的 N-Gram 谚语或解析谚语。例如,当点击
“眼不见为净”会带来以下建议:
1-Gram建议:
“一壶二尿”
2-Gram建议:
“看锅吃苦”
分析建议: “太多的厨师破坏了肉汤”
有没有办法在 ES 中做到这一点,或者我是否需要构建自己的逻辑?
1 克建议开箱即用,2 克建议可以通过 shingle
轻松实现。
这是一次尝试
PUT test
{
"settings": {
"analysis": {
"analyzer": {
"2-grams": {
"type": "custom",
"tokenizer": "standard",
"filter": [
"lowercase",
"shingles"
]
}
},
"filter": {
"shingles": {
"type": "shingle",
"min_shingle_size": 2,
"max_shingle_size": 2,
"output_unigrams": false
}
}
}
},
"mappings": {
"properties": {
"text": {
"type": "text",
"analyzer": "standard",
"fields": {
"2gram": {
"type": "text",
"analyzer": "2-grams"
}
}
}
}
}
}
接下来索引一些文档:
PUT test/_doc/1
{
"text": "Two pees in a pot"
}
PUT test/_doc/2
{
"text": "A Watched pot tastes bitter"
}
最后,您可以使用以下查询搜索 1-gram 建议,您将在响应中获得两个文档:
POST test/_search
{
"query": {
"match": {
"text": "A watched pot never boils"
}
}
}
您还可以使用以下查询搜索 2-gram 建议,并且只会出现第二个文档:
POST test/_search
{
"query": {
"match": {
"text.2gram": "A watched pot never boils"
}
}
}
PS:不确定“分析”建议的效果如何,请随时提供更多见解,我会更新。
我是 Elasticsearch 的新手,我希望构建一个包含谚语列表的前端应用程序。当用户浏览这些谚语时,我希望他们从谚语数据库中找到相关的 N-Gram 谚语或解析谚语。例如,当点击
“眼不见为净”会带来以下建议:
1-Gram建议: “一壶二尿”
2-Gram建议: “看锅吃苦”
分析建议: “太多的厨师破坏了肉汤”
有没有办法在 ES 中做到这一点,或者我是否需要构建自己的逻辑?
1 克建议开箱即用,2 克建议可以通过 shingle
轻松实现。
这是一次尝试
PUT test
{
"settings": {
"analysis": {
"analyzer": {
"2-grams": {
"type": "custom",
"tokenizer": "standard",
"filter": [
"lowercase",
"shingles"
]
}
},
"filter": {
"shingles": {
"type": "shingle",
"min_shingle_size": 2,
"max_shingle_size": 2,
"output_unigrams": false
}
}
}
},
"mappings": {
"properties": {
"text": {
"type": "text",
"analyzer": "standard",
"fields": {
"2gram": {
"type": "text",
"analyzer": "2-grams"
}
}
}
}
}
}
接下来索引一些文档:
PUT test/_doc/1
{
"text": "Two pees in a pot"
}
PUT test/_doc/2
{
"text": "A Watched pot tastes bitter"
}
最后,您可以使用以下查询搜索 1-gram 建议,您将在响应中获得两个文档:
POST test/_search
{
"query": {
"match": {
"text": "A watched pot never boils"
}
}
}
您还可以使用以下查询搜索 2-gram 建议,并且只会出现第二个文档:
POST test/_search
{
"query": {
"match": {
"text.2gram": "A watched pot never boils"
}
}
}
PS:不确定“分析”建议的效果如何,请随时提供更多见解,我会更新。