弹性搜索中的自动完成
我正计划为一个电子商务网站制作一个基于弹性搜索的自动完成模块。我正在使用edge_-ngram提供建议。我正在尝试这种配置弹性搜索中的自动完成,
Warning: implode(): Invalid arguments passed in /data/phpspider/zhask/webroot/tpl/detail.html on line 45
,,我正计划为一个电子商务网站制作一个基于弹性搜索的自动完成模块。我正在使用edge_-ngram提供建议。我正在尝试这种配置 **My index creation :** PUT my_index { "settings": { "analysis": { "analyzer": { "autocomplete": { "tokenizer": "autocomplete", "filter": [
**My index creation :**
PUT my_index
{
"settings": {
"analysis": {
"analyzer": {
"autocomplete": {
"tokenizer": "autocomplete",
"filter": [
"lowercase"
]
},
"autocomplete_search": {
"tokenizer": "lowercase"
}
},
"tokenizer": {
"autocomplete": {
"type": "edge_ngram",
"min_gram": 1,
"max_gram": 10,
"token_chars": [
"letter","digit"
]
}
}
}
},
"mappings": {
"doc": {
"properties": {
"title": {
"type": "text",
"analyzer": "autocomplete",
"search_analyzer": "autocomplete_search"
}
}
}
}
}
**Inserting Data**
PUT my_index/doc/1
{
"title": "iphone s"
}
PUT my_index/doc/9
{
"title": "iphone ka"
}
PUT my_index/doc/11
{
"title": "iphone ka t"
}
PUT my_index/doc/15
{
"title": "iphone 6"
}
PUT my_index/doc/14
{
"title": "iphone 6 16GB"
}
PUT my_index/doc/3
{
"title": "iphone k"
}
POST my_index/_refresh
POST my_index/_analyze
{
"tokenizer": "autocomplete",
"text": "iphone 6"
}
POST my_index/_analyze
{
"analyzer": "pattern",
"text": "iphone 6"
}
**Autocomplete suggestions**
When i am trying to find out closets match to iphone 6.It is not showing correct result.
GET my_index/_search
{
"query": {
"match": {
"title": {
"query": "iphone 6",
"operator": "and"
}
}
}
}
**Above query yielding :**
{
"took": 0,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 7,
"max_score": 0.28582606,
"hits": [
{
"_index": "my_index",
"_type": "doc",
"_id": "1",
"_score": 0.28582606,
"_source": {
"title": "iphone s"
}
},
{
"_index": "my_index",
"_type": "doc",
"_id": "9",
"_score": 0.25811607,
"_source": {
"title": "iphone ka"
}
},
{
"_index": "my_index",
"_type": "doc",
"_id": "14",
"_score": 0.24257512,
"_source": {
"title": "iphone 6 16GB"
}
},
{
"_index": "my_index",
"_type": "doc",
"_id": "3",
"_score": 0.19100356,
"_source": {
"title": "iphone k"
}
},
{
"_index": "my_index",
"_type": "doc",
"_id": "15",
"_score": 0.1862728,
"_source": {
"title": "iphone 6"
}
},
{
"_index": "my_index",
"_type": "doc",
"_id": "11",
"_score": 0.16358379,
"_source": {
"title": "iphone ka t"
}
},
{
"_index": "my_index",
"_type": "doc",
"_id": "2",
"_score": 0.15861572,
"_source": {
"title": "iphone 5 s"
}
}
]
}
}
但结果应该是:
{
"_index": "my_index",
"_type": "doc",
"_id": "15",
"_score": 1,
"_source": {
"title": "iphone 6"
}
}
请让我知道,如果我在这方面遗漏了什么,我是新手,因此不知道有任何其他方法可以产生更好的结果。您正在使用
自动完成搜索
作为您的搜索
分析器。如果您查看如何使用您指定的搜索分析器分析文本
POST my_index/_analyze
{
"analyzer": "autocomplete_search",
"text": "iphone 6"
}
你会得到
{
"tokens": [
{
"token": "iphone", ===> Only one token
"start_offset": 0,
"end_offset": 6,
"type": "word",
"position": 0
}
]
}
因为所有文档在反向索引中都有这个(iphone
)标记。所以所有的文件都被退回了
如果要匹配所需的结果,可以使用索引时使用的相同分析器
{
"query": {
"match": {
"title": {
"query": "iphone 6",
"operator": "and",
"analyzer" : "autocomplete"
}
}
}
}
你能让我们知道如何获得想要的结果吗?谢谢你的帮助。此外,我需要使用短语提示。我可以这样做吗?我想更正用户是否键入iphone 5并建议使用iphone 5。您必须更改分析器。一些分析器将索引五为5。让我们说现在我不考虑这种情况(IPON五)。假设用户搜索IPON 5,这将产生所需的结果。我用这个来搜索。“建议”:{“DidYouMean”:{“文本”:“iPhone5”,“短语”:{“分析器”:“自动完成”,“字段”:“名称”,“突出显示”:{“pre_标记”:“,“post_标记”:“}}}}}得到奇怪的输出,我想这是因为分析器的自动完成。”。{“文本”:“ipho ipho ipho ipho 5”,“突出显示”:“ipho ipho ipho 5”,“分数”:4.105417e-7},{“文本”:“ipho ipho iphon iphon 5”,“突出显示”:“iphon iphon iphon 5”,“分数”:4.105417e-7},