【问题标题】:Elasticsearch Not operator is not workingElasticsearch Not 运算符不起作用
【发布时间】:2016-05-01 15:00:51
【问题描述】:

我在 Elastic 搜索中遇到了 NOT 运算符的一些问题,这是我的查询

{
  "query": {
    "filtered": {
      "query": {
        "query_string": {
          "query": "-et_tax:\"Agriculture\" -et_tax:\"Airports/Ports\"" 
        }
      }
    }
  },
 "aggs": {
    "lawfirmcount": {
      "cardinality": {
        "field": "pd_lawfirmID",
        "precision_threshold": 1250 
      }
    }
  }  
}

我正在使用 PHP 和 MySQL 构建查询。当我使用上面显示错误的结果时,我需要在我的总结果中排除这些结果,我期望结果显示所有记录,但不在 et_tax 列中显示为 Agriculture AND Airport /端口。那么如何在查询中使用多个 NOT 运算符。

更新

当我通过相同的查询 AND/OR 时,两者都会显示相同的结果,

{
  "query": {
    "filtered": {
      "query": {
        "query_string": {
          "query": "-et_tax:\"Agriculture\" AND  -et_tax:\"Airports/Ports\""  
        }
      }
    }
  },
 "aggs": {
    "lawfirmcount": {
      "cardinality": {
        "field": "pd_lawfirmID",
        "precision_threshold": 1250 
      }
    }
  }  
}

上面用 AND 运算符会显示 1564 条记录,下面用 OR 运算符也会显示相同的计数。

{
  "query": {
    "filtered": {
      "query": {
        "query_string": {
          "query": "-et_tax:\"Agriculture\" OR  -et_tax:\"Airports/Ports\""  
        }
      }
    }
  },
 "aggs": {
    "lawfirmcount": {
      "cardinality": {
        "field": "pd_lawfirmID",
        "precision_threshold": 1250 
      }
    }
  }  
}

提前致谢,

【问题讨论】:

  • 可以分享et_tax字段的映射关系吗?
  • query_string 的默认运算符是 OR。您需要更改默认运算符或在条件之间添加 AND。 elastic.co/guide/en/elasticsearch/reference/current/…
  • @val et_tax 被映射为字符串
  • @satheesh 是否要排除包含 Airports/Ports 和 Agriculture 关键字的 et_tax?
  • 是的@Richa 我需要排除上述关键字的结果。

标签: php mysql elasticsearch elasticsearch-jdbc-river


【解决方案1】:

试试这个。

{
  "query": {
    "filtered": {
      "query": {
        "query_string": {
          "query": "* AND NOT (et_tax:\"Agriculture\" OR  et_tax:\"Airports/Ports\")"  
        }
      }
    }
  },
 "aggs": {
    "lawfirmcount": {
      "cardinality": {
        "field": "pd_lawfirmID",
        "precision_threshold": 1250 
      }
    }
  }  
}

【讨论】:

  • 如果我想在AND NOT之前添加一些额外的查询,我可以这样包含(\"BBC OR SKY\") AND et_tx:\"corporate\" AND NOT (et_tax:\"Agriculture\" OR et_tax:\"Airports/Ports\")"这样对吗?
猜你喜欢
  • 2013-07-31
  • 1970-01-01
  • 2022-06-21
  • 2017-07-28
  • 2016-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多