gpt4 book ai didi

elasticsearch - Elasticsearch 中的自动完成

转载 作者:行者123 更新时间:2023-12-03 01:45:59 26 4
gpt4 key购买 nike

我计划为电子商务网站制作一个基于 Elasticsearch 的自动完成模块。我正在使用 edge_ngram 提供建议。我正在尝试这种配置。

**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"
}
}

如果我在这方面遗漏了什么,请告诉我,我是新手,所以不知道任何其他可能产生更好结果的方法。

最佳答案

您正在使用 autocomplete_search作为您的search_analyzer .如果您查看如何使用您指定的搜索分析器分析您的文本。

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 中都有这个 ( reverse index) 标记.所以所有的文件都被退回

如果您想匹配所需的结果,您可以使用索引时使用的相同分析器。
{
"query": {
"match": {
"title": {
"query": "iphone 6",
"operator": "and",
"analyzer" : "autocomplete"
}
}
}
}

关于elasticsearch - Elasticsearch 中的自动完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43912342/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com