gpt4 book ai didi

elasticsearch - Elasticsearch 多个 simple_query_string with boost

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

我为我的所有文档设置了一个索引:

{
"mappings" {
"book" {
"_source": { "enabled": true },
"properties": [
"title": { "type": "string", "analyzer": "standard", "search_analyzer": "standard" },
"description": { "type": "string", "analyzer": "standard", "search_analyzer": "standard" },
"author": { "type": "string", "analyzer": "standard", "search_analyzer": "standard" }
]
}
}
}

我将其推送到名为“”的索引中。

想要做的是根据以下要求执行搜索。假设用户输入类似“大黄铲”的内容

  1. 通过三种方式搜索用户输入的关键字:
    1. 作为一个完整的短语:“简单的黄色铲子”
    2. 作为一组 AND 关键字:“simple+yellow+shovel”
    3. 作为一组 OR 关键字:“simple|yellow|shovel”
  2. 确保关键字集按优先顺序执行(提升?):
    1. 全文优先
    2. 第二个
    3. 或第三次

使用简单的查询可以找到单个搜索:

{
"query": {
"simple_query_string": {
"query": "\"simple yellow shovel\""
}
}
}

如何使用提升执行多重搜索?或者我应该在索引字段上使用类似“匹配”查询的东西吗?

最佳答案

我不确定我是否答对了。我已经假定优先顺序作者>标题>描述

{
"query": {
"bool": {
"should": [
{
"bool": {
"must": [
{
"multi_match": {
"query": "simple yellow shovel",
"fields": [
"author^7",
"title^3",
"description"
],
"type": "phrase",
"boost": 10
}
}
]
}
},
{
"bool": {
"must": [
{
"multi_match": {
"query": "simple",
"fields": [
"author^7",
"title^3",
"description"
],
"boost": 5
}
},
{
"multi_match": {
"query": "yellow",
"fields": [
"author^7",
"title^3",
"description"
],
"boost": 5
}
},
{
"multi_match": {
"query": "shovel",
"fields": [
"author^7",
"title^3",
"description"
],
"boost": 5
}
}
]
}
},
{
"multi_match": {
"query": "simple",
"fields": [
"author^7",
"title^3",
"description"
],
"boost": 2
}
},
{
"multi_match": {
"query": "yellow",
"fields": [
"author^7",
"title^3",
"description"
],
"boost": 2
}
},
{
"multi_match": {
"query": "shovel",
"fields": [
"author^7",
"title^3",
"description"
],
"boost": 2
}
}
]
}
}
}

有人可以验证一下吗?可以引用Boost Query链接以获取更多信息。这是您要找的吗?

希望对您有所帮助!

编辑:用 dis_max 重写

{
"query": {
"bool": {
"should": [
{
"dis_max": {
"tie_breaker": 0.7,
"queries": [
{
"bool": {
"must": [
{
"multi_match": {
"query": "simple yellow shovel",
"fields": [
"author^7",
"title^3",
"description"
],
"type": "phrase",
"boost": 10
}
}
]
}
},
{
"bool": {
"must": [
{
"dis_max": {
"tie_breaker": 0.7,
"queries": [
{
"multi_match": {
"query": "simple",
"fields": [
"author^7",
"title^3",
"description"
],
"boost": 5
}
},
{
"multi_match": {
"query": "yellow",
"fields": [
"author^7",
"title^3",
"description"
],
"boost": 5
}
},
{
"multi_match": {
"query": "shovel",
"fields": [
"author^7",
"title^3",
"description"
],
"boost": 5
}
}
]
}
}
]
}
},
{
"multi_match": {
"query": "simple",
"fields": [
"author^7",
"title^3",
"description"
],
"boost": 2
}
},
{
"multi_match": {
"query": "yellow",
"fields": [
"author^7",
"title^3",
"description"
],
"boost": 2
}
},
{
"multi_match": {
"query": "shovel",
"fields": [
"author^7",
"title^3",
"description"
],
"boost": 2
}
}
]
}
}
]
}
}
}

这似乎至少在我的数据集上给我带来了更好的结果。这是理解 dismax 的重要来源

请多多尝试,看看您是否获得了预期的结果。使用 Explain API 的帮助.

关于elasticsearch - Elasticsearch 多个 simple_query_string with boost,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33398143/

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