gpt4 book ai didi

elasticsearch - ElasticSearch中的提前键入如何处理多个单词和部分文本匹配

转载 作者:行者123 更新时间:2023-12-02 22:35:19 26 4
gpt4 key购买 nike

我想举例说明。
我的ElasticSearch数据集的文档具有一个字段“product_name”。
一个文档的product_name ='Anmol Twinz Biscuit“
当用户键入(a)“Anmol Twin”或(b)“Twin Anmol”或(c)“Twinz Anmol”或(d)Anmol Twinz时,我希望将此特定记录作为搜索结果返回。
但是,这仅在我在搜索查询中指定完整单词时才有效。部分比赛无效。因此,(a)和(b)没有返回期望的结果。

定义的映射(通过_mapping查询获得)

{
"sbis_product_idx": {
"mappings": {
"items": {
"properties": {
"category_name": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"product_company": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"product_id": {
"type": "long"
},
"product_name": {
"type": "text"
},
"product_price": {
"type": "float"
},
"suggest": {
"type": "completion",
"analyzer": "simple",
"preserve_separators": true,
"preserve_position_increments": true,
"max_input_length": 50
}
}
}
}
}
}

正在使用的查询:
{
"_source": "product_name",
"query": {
"multi_match" : {
"type": "best_fields",
"query": "Twin Anmol",
"fields": [ "product_name", "product_company" ],
"operator": "and"
}
}
}

ES中的文档
{
"_index": "sbis_product_idx",
"_type": "misc",
"_id": "107996",
"_version": 1,
"_score": 0,
"_source": {
"suggest": {
"input": [
"Anmol",
"Twinz",
"Biscuit"
]
},
"category_name": "Other Product",
"product_company": "Anmol",
"product_price": 30,
"product_name": "Anmol Twinz Biscuit",
"product_id": 107996
}
}

结果
"hits": {
"total": 0,
"max_score": null,
"hits": []
}

错误的查询/映射?

最佳答案

我只是使用示例中给出的映射和索引ES文档创建了索引,并将查询中的运算符and更改为or,这为我提供了所有4个查询组合的所有结果。

在我的查询下方找到

{
"_source": "product_name",
"query": {
"multi_match" : {
"type": "best_fields",
"query": "Anmol Twinz",
"fields": [ "product_name", "product_company" ],
"operator": "or" --> changed it to `or`
}
}
}

使用and运算符,您的查询会尝试在搜索查询中找到两个词,其中有些词不是完整的 token ,如ES中的Twin,因此当您将运算符更改为or时(如果有任何 token ),您不会获得它们的结果目前,它将匹配。

注意:-如果要匹配 TwinTwi之类的部分 token ,则需要使用官方ES doc https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-ngram-tokenizer.html中所述的n-gram token 及其完全不同的设计。

关于elasticsearch - ElasticSearch中的提前键入如何处理多个单词和部分文本匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57080152/

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