我正在使用elasticsearch 5.5.2
我正在尝试短语建议,并且无法将其配置为返回索引中的确切建议。我的索引设置,类型映射和短语建议查询如下。请帮忙。
我的索引设置和类型映射是
PUT test
{
"settings": {
"index": {
"analysis": {
"analyzer": {
"trigram_analyzer": {
"type": "custom",
"tokenizer": "standard",
"filter": ["shingle"]
}
},
"filter": {
"shingle": {
"type": "shingle",
"min_shingle_size": 2,
"max_shingle_size": 3
}
}
}
}
},
"mappings": {
"test": {
"properties": {
"title": {
"type": "text",
"fields": {
"trigram": {
"type": "text",
"analyzer": "trigram_analyzer"
}
}
}
}
}
}
}
使用
编制索引文件POST test/test?refresh=true
{"title": "noble prize"}
我使用的短语建议者
POST test/_search
{
"suggest": {
"text": "nobe priz",
"simple_phrase": {
"phrase": {
"field": "title.trigram",
"size": 1,
"gram_size": 3,
"direct_generator": [ {
"field": "title.trigram",
"suggest_mode": "always"
} ],
"highlight": {
"pre_tag": "<em>",
"post_tag": "</em>"
}
}
}
}
}
我得到的结果是
"suggest": {
"simple_phrase": [
{
"text": "nobe priz",
"offset": 0,
"length": 9,
"options": [
{
"text": "noble priz",
"highlighted": "<em>noble</em> priz",
"score": 0.09049256
}
]
}
]
}
我的问题是,对于搜索文本 - “nobe priz” - 为什么我没有获得'高贵奖'作为建议。相反,为什么我只是得到'高贵的priz'?
如果我们看到,'贵族奖'就是我保存的文件。
如果我将大小的值增加到'2',那么我也不会获得'高贵奖'作为其中一个建议。
大小为2,对于搜索文本'nobe priz',我得到以下回复
"suggest": {
"simple_phrase": [
{
"text": "nobe priz",
"offset": 0,
"length": 9,
"options": [
{
"text": "noble priz",
"highlighted": "<em>nobel</em> priz",
"score": 0.09049256
},
{
"text": "nobe prize",
"highlighted": "nobe <em>prize</em>",
"score": 0.09049256
}
]
}
]
}
我应该怎样做才能获得“贵族奖”作为建议? 请帮忙。
答案 0 :(得分:0)
我自己找到了答案。需要告诉ES使用参数'max_errors'拼写错误的搜索文本中有多少个术语。 'max_errors'可以以浮点数或绝对数的形式给出百分比值。
“点击以下有关带有max_errors参数的短语建议器的ES文档” https://www.elastic.co/guide/en/elasticsearch/reference/master/search-suggesters-phrase.html
因此我将'max_errors'参数值添加为2,如下所示
POST test/_search
{
"suggest": {
"text": "nobe priz",
"simple_phrase": {
"phrase": {
"field": "title.trigram",
"size": 1,
"gram_size": 3,
"max_errors": 2,
"direct_generator": [ {
"field": "title.trigram",
"suggest_mode": "always"
} ],
"highlight": {
"pre_tag": "<em>",
"post_tag": "</em>"
}
}
}
}
}
我得到了完全匹配的短语建议,如下所示
"suggest": {
"simple_phrase": [
{
"text": "nobe priz",
"offset": 0,
"length": 9,
"options": [
{
"text": "noble prize",
"highlighted": "<em>noble prize</em>",
"score": 0.4833575
}
]
}
]
}
因此,当max_errors为2时,建议'贵族奖'将被退回。
干杯:)