php - Elasticsearch query_string包含未查询的术语

标签 php elasticsearch laravel-5

我是Elastic Search的新手,但已经有一段时间遇到这个问题了:

我要实现的目标是使用大量分组复选框(经过动态提取)进行筛选搜索,例如:

  • 年级(8-12),
  • 具有唯一ID(很多)的
  • 元数据标签,
  • 教学大纲(目前只有两个),
  • 年,等等。

  • 我目前拥有的代码(尚未包括所有字段):
    $query = Contribute::searchByQuery(["query"=> ["query_string"=> ["query"=> "(grade=>'12' OR '10') AND (syllabus=>'IEB') AND (meta_data=>'1')"]]], null, null, $paginate, $page);
    

    但是,我遇到的问题是,例如,这将使具有以下值的行匹配:
  • id == 1(来自meta_data => 1 ???),教学大纲== IEB(足够公平),等级== 11(为什么?),meta_data == 1(足够公平)
  • id == 17,教学大纲== IEB(足够),成绩== 9(为什么),meta_data == 3(为什么?)
  • ,然后似乎所有正确的行也包括在内

  • 该解决方案(这是不可行的,因为元数据可能会扩展到成千上万的唯一ID),而不是在所有其他现有术语上添加NOT:
    $query = Contribute::searchByQuery(["query"=> ["query_string"=> ["query"=> "(grade=>'12' OR '10' NOT '8' NOT '9' NOT '11') AND (syllabus=>'IEB' NOT 'DOE') AND (meta_data=>'1' NOT '2' NOT '3' NOT '4' etc etc etc.)"]]], null, null, $paginate, $page);
    

    所以问题是,默认情况下如何排除未指定的任何术语?目前,他们只是包括自己。以比第二段代码更简单的方式,我必须显式地添加不需要的内容。

    顺便说一句,我是根据用户选择来构建这些查询的,因此它不像这些示例那样静态。另外,我发现进行数据库检查以查看不包含要添加到查询中的术语是毫无意义的。 flex 搜索的重点不是要避免执行数据库查询吗?

    最佳答案

    您正在将PHP代码的语法=>与Lucene query string syntax混合在一起。

    (grade=>'12' OR '10') AND (syllabus=>'IEB') AND (meta_data=>'1')
    

    相反,应为:
    (grade:12 OR grade:10) AND (syllabus:IEB) AND (meta_data:1)
    

    请注意,我删除了不必要的引号(实际上只有在有空格的情况下才真正需要它们),然后将=>替换为:。我还修复了grade=>'12' OR '10'以仅查看成绩。没有它,'10'没有与之关联的字段,因此将看起来像是 _all field:
    (grade:12 OR _all:10) AND (syllabus:IEB) AND (meta_data:1)
    

    关于php - Elasticsearch query_string包含未查询的术语,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38551627/

    相关文章:

    php - 函数 Db::__construct() 的参数太少,传入 0

    elasticsearch - 获取整个索引的总词频(Elasticsearch)

    php - 在数组中查找非重复元素

    php - 如何根据 GPS 位置的接近程度过滤数据库结果?

    ElasticSearch NEST 弹性客户端生命周期

    Laravel - AWS Beanstalk - 存储符号链接(symbolic link)不起作用(403 错误)

    php - Laravel ORM - 自定义 GroupBy Month JSON 响应

    php - Laravel 无法禁用维护模式

    php - 如何检索类别名称?

    elasticsearch - 使用Python请求更新ElasticSearch文档