gpt4 book ai didi

elasticsearch - Elasticsearch 问题与simple_query_string

转载 作者:行者123 更新时间:2023-12-03 02:24:41 27 4
gpt4 key购买 nike

对于以下情况,我找不到完美的解决方案,希望有人可以在此提供帮助。

假设存在以下类型的文档,称为“组”:

  • {“名称”:“订单1.0”}
  • {“名称”:“报告和分析1.0”}
  • {“name”:“回扣1.0”}

  • 当我在simple_query_string下面搜索文档时,我得到了所有三个记录,而不是一个记录(即#1)
    {
    "size" : 20,
    "query" : {
    "bool" : {
    "must" : [
    {
    "bool" : {
    "should" : [
    {
    "simple_query_string" : {
    "query" : "Orders 1.0*",
    "fields" : [
    "name^1.0"
    ],
    "flags" : -1,
    "default_operator" : "or",
    "lenient" : false,
    "analyze_wildcard" : true,
    "boost" : 1.0
    }
    }
    ],
    "disable_coord" : false,
    "adjust_pure_negative" : true,
    "boost" : 1.0
    }
    }
    ],
    "disable_coord" : false,
    "adjust_pure_negative" : true,
    "boost" : 1.0
    }
    }
    }

    我只希望搜索名称为Orders 1.0的一条记录

    最佳答案

    原因是此"default_operator" : "or",
    我假设name字段是一个已分析的字段。如果使用分析仪,则将被标记化。输入的内容也一样。因此,您有以下内容(用于标准分析仪)

  • 订单1.0-> [“订单”,“1.0”]
  • 报告与分析1.0-> [“报告”,“分析”,“1.0”]
  • 回扣1.0-> [“回扣”,“1.0”]
  • GET _analyze
    {
    "analyzer": "standard",
    "text": ["Orders 1.0", "Reports & Analysis 1.0", "Rebates 1.0"]
    }

    {
    "tokens" : [
    {
    "token" : "orders",
    "start_offset" : 0,
    "end_offset" : 6,
    "type" : "<ALPHANUM>",
    "position" : 0
    },
    {
    "token" : "1.0",
    "start_offset" : 7,
    "end_offset" : 10,
    "type" : "<NUM>",
    "position" : 1
    },
    {
    "token" : "reports",
    "start_offset" : 11,
    "end_offset" : 18,
    "type" : "<ALPHANUM>",
    "position" : 2
    },
    {
    "token" : "analysis",
    "start_offset" : 21,
    "end_offset" : 29,
    "type" : "<ALPHANUM>",
    "position" : 3
    },
    {
    "token" : "1.0",
    "start_offset" : 30,
    "end_offset" : 33,
    "type" : "<NUM>",
    "position" : 4
    },
    {
    "token" : "rebates",
    "start_offset" : 34,
    "end_offset" : 41,
    "type" : "<ALPHANUM>",
    "position" : 5
    },
    {
    "token" : "1.0",
    "start_offset" : 42,
    "end_offset" : 45,
    "type" : "<NUM>",
    "position" : 6
    }
    ]
    }

    由于默认的运算符是 OR,这意味着您需要任何已分析的标记来匹配,而不是全部。而且,由于您包括了所有这些文件中都存在的 1.0,因此它与所有文档都匹配。一种解决方案是将默认运算符更改为 AND

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

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