gpt4 book ai didi

elasticsearch - 如果结果以单词开头,则提升

转载 作者:行者123 更新时间:2023-11-29 02:51:24 29 4
gpt4 key购买 nike

我使用 Elasticsearch 通过 ngram 过滤器自动完成搜索。如果结果以搜索关键字开头,我需要提升结果。

我的查询很简单:

"query": {
"match": {
"query": "re",
"operator": "and"
}
}

这是我的结果:

  • 餐厅餐馆
  • 时装和重新触及
  • 快速恢复

但我希望他们像这样:

  • 餐厅餐馆
  • 快速恢复
  • 时装和重新触及

如何提高以关键字开头的结果?

如果有帮助,这是我的映射:

{
"settings": {
"analysis": {
"analyzer": {
"partialAnalyzer": {
"type": "custom",
"tokenizer": "ngram_tokenizer",
"filter": ["asciifolding", "lowercase"]
},
"searchAnalyzer": {
"type": "custom",
"tokenizer": "standard",
"filter": ["asciifolding", "lowercase"]
}
},

"tokenizer": {
"ngram_tokenizer": {
"type": "edge_ngram",
"min_gram": "1",
"max_gram": "15",
"token_chars": [ "letter", "digit" ]
}
}
}
},

"mappings": {
"place": {
"properties": {
"name": {
"type": "string",
"index_analyzer": "partialAnalyzer",
"search_analyzer": "searchAnalyzer",
"term_vector": "with_positions_offsets"
}
}
}
}
}

问候,

最佳答案

这个想法怎么样,不是100%确定,因为这取决于我认为的数据:

  • 在您的 name 字段中创建一个子字段,该字段应使用 keyword 分析器进行分析(几乎保持原样)
  • 将查询更改为带有should
  • bool
  • 一个应该是您现在的查询
  • 另一个应该是一个匹配与子字段上的phrase_prefix

映射:

{
"settings": {
"analysis": {
"analyzer": {
"partialAnalyzer": {
"type": "custom",
"tokenizer": "ngram_tokenizer",
"filter": [
"asciifolding",
"lowercase"
]
},
"searchAnalyzer": {
"type": "custom",
"tokenizer": "standard",
"filter": [
"asciifolding",
"lowercase"
]
},
"keyword_lowercase": {
"type": "custom",
"tokenizer": "keyword",
"filter": [
"asciifolding",
"lowercase"
]
}
},
"tokenizer": {
"ngram_tokenizer": {
"type": "edge_ngram",
"min_gram": "1",
"max_gram": "15",
"token_chars": [
"letter",
"digit"
]
}
}
}
},
"mappings": {
"place": {
"properties": {
"name": {
"type": "string",
"index_analyzer": "partialAnalyzer",
"search_analyzer": "searchAnalyzer",
"term_vector": "with_positions_offsets",
"fields": {
"as_is": {
"type": "string",
"analyzer": "keyword_lowercase"
}
}
}
}
}
}
}

查询:

{
"query": {
"bool": {
"should": [
{
"match": {
"name": {
"query": "re",
"operator": "and"
}
}
},
{
"match": {
"name.as_is": {
"query": "re",
"type": "phrase_prefix"
}
}
}
]
}
}
}

关于elasticsearch - 如果结果以单词开头,则提升,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33746836/

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