javascript - Elasticsearch 查询字符串 : partially match a NOT query?

标签 javascript elasticsearch

我正在创建一个将使用 bool 运算符 ( as described here ) 的搜索字段,并且我希望它们的行为与我的正常(非 bool 运算符)查询相同,由于 其与部分字符串匹配前缀_匹配。举例来说:搜索 fir,得到的结果如 firepitfire ballfirm 等。但是,如果我随后搜索 fire -b,它仍然返回 fire ball,我认为这是错误的;我必须搜索 fire -ball 以排除 fire ball。有没有办法改变这种行为?

作为引用,这是当前发送到 ES 服务器的查询:

{
  "query": {
    "bool": {
      "should": [
        {
          "queryString": {
            "fields": [
              "name"
            ],
            "query": "fire -b",
            "defaultOperator": "OR"
          }
        },
        {
          "multi_match": {
            "query": "fire -b",
            "type": "phrase_prefix",
            "fields": [
              "name"
            ]
          }
        }
      ]
    }
  }
}

最佳答案

查询字符串 查询允许使用通配符。我相信你应该删除多重匹配。我相信会弄乱你的结果,只需在每个术语末尾添加一个通配符,如下所示。如果您想要某些内容完全匹配,只需不要添加通配符即可。此外,此查询支持模糊性,默认情况下设置为AUTO,这可能会再次弄乱您的结果。如果您想禁用它,只需将其设置为零即可。

{
  "query": {
    "bool": {
      "should": [
        {
          "queryString": {
            "fields": [
              "name"
            ],
            "query": "fire* -b*",
            "defaultOperator": "OR"
          }
        }
      ]
    }
  }
}

关于javascript - Elasticsearch 查询字符串 : partially match a NOT query?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40100006/

相关文章:

javascript - 为什么js函数不会永久改变html代码?

javascript - 如何在 React 中过滤或搜索对象数组?

javascript - 处理来自页面上多个元素的输入

elasticsearch - 如何在Elasticsearch上省略空格

windows - Elasticsearch Master节点困惑

elasticsearch - 在Elasticsearch中请求正文搜索

elasticsearch - 如何在ElasticSearch上执行不区分大小写的搜索?

javascript - 为什么我的 js.erb 文件中没有工作链接

javascript - Sequelize : Naming collision between attribute 'playlist' and association 'playlist' ?

elasticsearch - Elasticsearch 'failed to find filter under name '