PHP Elastic Search 过滤查询字符串搜索

2024-04-15

所有人都希望使用过滤查询,其中结果应包含来自“query_string”以及应用的“term - filter”的数据。

GET blog/_search
{
    "query": {
        "filtered": {
            "query": {
                "query_string": {
                    "fields": [ "description" ],
                    "query": "a"                 // or just ""
                }
            },
            "filter": {
                "terms": {
                    "topic_id": [
                        10
                    ]
                }
            }
        }
    }
}

预期结果是:

  1. 所有包含字母“a”或“”且 topic_id 为 10 的博客记录。
  2. 即使描述为空/空,topic_id 为 10 的其余记录也是如此。

所以最终结果应该是 - 得分较高的匹配记录应该位于顶部,然后是与过滤器中的“topic_id”匹配的记录。


实现这一目标的一种方法是使用多字段 https://www.elastic.co/guide/en/elasticsearch/reference/current/_multi_fields.html映射为description场地。多字段中的字段之一不应被分析。 一旦数据被重新索引,您可以使用一个简单的布尔查询 https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-bool-query.html实现你想要的:

Example

创建索引:

put test
{
    "mappings": {
        "data" : {
            "properties": {
                "description" : {
                    "type": "string",
                     "fields": {
                        "raw" : {"type": "string","index": "not_analyzed"}
                     }
                }
            }   
        }
    }
}

指数数据:

put test/data/1 
{
    "description" : "a",
    "test_id" : 10
}
put test/data/2
{
    "description" : "",
    "test_id" : 10
}

put test/data/3
{
    "description" : "hello",
    "test_id" : 10
}


put test/data/4
{
    "description": "a",
    "test_id" : 20
}

Query:

post test/data/_search
{
   "query": {
      "filtered": {
         "query": {
            "bool": {
               "disable_coord": "true",
               "should": [
                  {
                     "query_string": {
                        "fields": [
                           "description"
                        ],
                        "query": "a"
                     }
                  },
                  {
                     "constant_score": {
                        "filter": {
                           "term": {
                              "description.raw": ""
                           }
                        },
                        "boost": 0.2
                     }
                  },
                  {
                     "constant_score": {
                        "filter": {
                           "exists": {
                              "field": "description"
                           }
                        },
                        "boost": 0.1
                     }
                  }
               ]
            }
         },
         "filter": {
            "terms": {
               "test_id": [
                  10
               ]
            }
         }
      }
   }
}

结果 :

 "hits": [
         {
            "_index": "test",
            "_type": "data",
            "_id": "1",
            "_score": 0.5113713,
            "_source": {
               "description": "a",
               "test_id": 10
            }
         },
         {
            "_index": "test",
            "_type": "data",
            "_id": "2",
            "_score": 0.29277003,
            "_source": {
               "description": "",
               "test_id": 10
            }
         },
         {
            "_index": "test",
            "_type": "data",
            "_id": "3",
            "_score": 0.097590014,
            "_source": {
               "description": "hello",
               "test_id": 10
            }
         }
      ]

查询空字符串:

{
   "query": {
      "filtered": {
         "query": {
            "bool": {
               "disable_coord": "true",
               "should": [
                  {
                     "query_string": {
                        "fields": [
                           "description"
                        ],
                        "query": ""
                     }
                  },
                  {
                     "constant_score": {
                        "filter": {
                           "term": {
                              "description.raw": ""
                           }
                        },
                        "boost": 0.2
                     }
                  },
                  {
                     "constant_score": {
                        "filter": {
                           "exists": {
                              "field": "description"
                           }
                        },
                        "boost": 0.1
                     }
                  }
               ]
            }
         },
         "filter": {
            "terms": {
               "test_id": [
                  10
               ]
            }
         }
      }
   }
} 

Result :

  "hits": [
         {
            "_index": "test",
            "_type": "data",
            "_id": "2",
            "_score": 1.3416407,
            "_source": {
               "description": "",
               "test_id": 10
            }
         },
         {
            "_index": "test",
            "_type": "data",
            "_id": "1",
            "_score": 0.44721356,
            "_source": {
               "description": "a",
               "test_id": 10
            }
         },
         {
            "_index": "test",
            "_type": "data",
            "_id": "3",
            "_score": 0.44721356,
            "_source": {
              "description": "hello",
               "test_id": 10
            }
         }
      ]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PHP Elastic Search 过滤查询字符串搜索 的相关文章

  • 使 pdo::query 静态

    当我运行下面的代码时出现此错误 我通常使用 msql 函数 但我尝试使用 PDO 代替 怎么了 致命错误 第 14 行无法静态调用非静态方法 PDO query
  • 如何使用CSS将背景图像放入选择选项标签中

    我有一个从 json 响应接收的国家 地区下拉列表 并且想要在国家 地区名称旁边添加相应的国家 地区国旗图标 也从 json 响应获取图像 我已经尝试了不同的 jQuery 和 bootstrap 插件 但他们所做的是破坏我以前的选择框样式
  • 为什么我不能在 TCPDF 表中使用 č,ć,đ 图表?

    我正在为我的网站构建一个 tcpdf 文件 该 tcpdf 文件中有一个包含一些数据的表格 但我无法使该章程正常工作 对于编码 我使用 windows 1250 宪章女巫不起作用 我已经尝试过 utf 8 但仍然没有得到这个章程 tcpdf
  • 使用 php 获取当前月份的最后 3 个月

    我想获取当前月份最近 3 个月的名称 例如当前月份是八月 所以 我想要六月 七月 八月这样的数据 我已经尝试过这段代码echo date F strtotime 3 months 它只返回六月 如何使用 php 获取当前月份的最后 3 个月
  • SMTP 配置在生产中不起作用

    我正在尝试在提交表单时发送电子邮件 我正在使用 PHPMailer 使用以下配置发送邮件 mail new PHPMailer mail gt isSMTP mail gt Host mail example in mail gt Port
  • 在值中包含换行符

    我有一个 Word 模板 其中 php 代码中定义了值 在PHP代码中 document gt setValue Value1 value1 在word模板中 Value1 如何将包含两个值之间的断线的值包含在单词的值中 Replace n
  • PHP 或 WAMP 不确定是什么

    我已经安装了 WAMP 服务器 2 0 PHP 5 4 3 安装WAMP后我已经重新启动了所有服务并且可以打开 phpinfo 显示良好 phpmyadmin 它也显示得很好 我可以使用数据库 然而 当在 Chrome 中运行简单的 php
  • zip 文件的校验和

    我目前正在开发一个工具 它上传一组文件 然后使用 md5 校验和将文件与上一批上传的文件进行比较 并告诉您哪些文件已更改 对于常规文件 这工作正常 但某些上传的文件是 zip 存档 即使其中的文件相同 它们几乎总是会发生变化 有没有一种方法
  • 在 Laravel 5 中截断表

    描述 我有一个充满测试数据的表 有时 我想清除它以获取新数据 我可以在 DBMS 应用程序中执行截断 例如MySQL 工作台 但我试图在我的应用程序中实现它 Goal 创建一个按钮 单击时截断数据库中的表 这是我的步骤 1 声明一条路线 R
  • 如何在类似 MVC 的页面中加载基于漂亮 URL 的类?

    我想请教一些关于如何解决这个问题的提示 我正在尝试构建自己的 MVC 网站 我了解了 URL 的基础知识 http example com blog cosplay cosplayer expo today 博客 gt 控制器cosplay
  • 在 CircleCI 中设置 Elasticsearch 和 Ruby on Rails

    我正在尝试在 Rails 应用程序中使用 Elasticsearch 设置 CircleCI 我想已经配置了镜像 但是如何在 CI 中连接到它 到目前为止我已经尝试过 https github com elastic elasticsear
  • 如何在 yii2 中使用两个不同的模型登录或切换身份类别?

    我想允许用户从两个不同的模型登录 配置文件 user gt identityClass gt app models User one more class here enableAutoLogin gt false authTimeout
  • 强制 Composer 下载 git repo 而不是 zip

    我对作曲家有一些问题 require php gt 5 3 2 kriswallsmith buzz 0 7 Repo https github com kriswallsmith Buzz tree v0 7 https github c
  • MySQL PHP邮政编码比较具体距离

    我试图找出比较一个邮政编码 用户提供的 和一大堆其他邮政编码 现在大约有 200 个邮政编码 之间的距离的最有效方法 相对于加载时间 但它会随着时间的推移而增加 我不需要任何精确的东西 只是在球场上 我下载了整个美国的邮政编码 csv 文件
  • WordPress 插件中的类自动加载器

    我想编写一个类自动加载器以在 WordPress 插件中使用 该插件将安装在多个站点上 我想尽量减少与其他插件发生冲突的机会 自动加载器将是这样的 function autoload name some code here 我的主要问题是
  • suhosin.mt_srand.ignore 在 PHP 中一致洗牌数组的解决方法?

    我有一个 PHP 脚本 需要随机化一个具有一致结果的数组 这样它就可以向用户呈现前几个项目 然后如果他们愿意 他们可以从同一个打乱的集合中提取更多结果 我目前使用的是这个 基于我相信的 Fisher Yates 算法 function sh
  • 从数据库填充复选框

    我有两个表 第一个由与名称关联的 id 组成 1 汽车 2 火车 3 普通 ETC 第二个表由两个字段 user id 和第一个表中的 id 组成 例如 1 1 2 1 3 当用户转到该页面时 我试图重新填充选定的复选框 首先 您查询数据库
  • 如何在 Zend Framework 3 中注册自定义表单视图助手

    我正在将继承的 Zend Framework 2 应用程序迁移到 Zend Framework 3 并且在注册自定义表单视图助手时遇到了一些困难 这些助手在应用程序使用版本 2 时起作用 主要用于添加标签属性以实现可访问性 例如 这是一个自
  • 检查 $_POST 数据

    我正在对表单进行一些垃圾邮件检查 下面的代码在我的本地主机上正常工作 如果为 true 则重定向到 google com 但是 当它在生产服务器上时却不起作用 执行脚本的其余部分并且不重定向到 Google com if POST SERV
  • Laravel $request->file() 返回 null

    尝试在后端使用 Laravel 上传文件时遇到问题 Issue Laravel request gt file 方法返回 null Setup 我使用以下方法构建了一个 AJAX 请求超级代理人 https github com visio

随机推荐

  • 检查(从书签)页面是否已加载?

    我正在写一个书签 javascript 这里的问题是用户可以在某些页面完成加载之前和之后调用它 我想确保脚本仅在页面加载完成后运行 怎么做 检查文档是否已加载的一种方法是检查文档就绪状态 http www w3 org TR html5 d
  • Python C-API 访问字符串常量

    我想使用 python 的 C API 在 C 语言中实现我为 python 编写的库 在 python 中 我可以通过声明以下内容在我的模块中声明 常量 RED red Not really a constant I know BLUE
  • 如何使用 stargazer 或 xtable 省略交互?

    是否可以使用omit选项 通常我会将变量名称写入omit c varname 但在互动的情况下我不知道该写什么 有什么提示吗 在其他包中如何解决这个问题 例如xtable documentclass article begin docume
  • Firebase 更改 Android 中子数据信息的布局

    这是我的 firebase 数据结构 当在我的应用程序中打印出来时 它是这样的 我该如何改变这个 所以它不显示逗号 但改为新行 在 Android 中 我只有一段代码可以从子 成分 中检索所有值 那是因为您已将成分存储在数组中 Fireba
  • 想要在激活 iOS 键盘时调整浏览器视口的大小

    在 iOS 网络浏览器 Safari Chrome 等 中 当您单击输入字段并显示键盘时 它会保持视口大小相同 但将其部分向上滑动到视图之外 这使得创建类似应用程序的网站非常困难 因为我正在编写一个聊天应用程序 当键盘显示时 我希望将对话完
  • SQL Server:如何将固定值绑定到列?

    假设我定义了一个 char 列类型 我想严格限制它的值 例如 黑 白 红 蓝 我怎样才能做到这一点 据我所知 这在 Access 中很容易 P 如果只有几个允许的值 那么您可以使用CHECK约束 http msdn microsoft co
  • 使用 Docker Jenkins 容器管道构建 docker 映像时找不到 Docker

    我有一个 Jenkins 作为 docker 容器运行 现在我想使用管道构建 Docker 映像 但 Jenkins 容器总是告诉 Docker 未找到 simple tdd pipeline Running shell script do
  • 射线聚类算法

    我知道显然有点的聚类算法 但我有不同的场景 我有许多光线 它们的起点都在 3D 球体上 并且其方向矢量向内指向球体 一些光线指向 A 点 其他光线指向 B 点等 并带有一些噪声 即光线彼此不完全相交 是否有一种聚类算法可以让我根据光线指向的
  • 将 ReadonlySpan 转换为 int 的最快方法?

    我有一个带有字符串的文件 40070 我读它并将其转换为ReadonlySpan
  • 如何在 Rails 4 中使用关注点

    默认的 Rails 4 项目生成器现在会在控制器和模型下创建目录 concerns 我找到了一些有关如何使用路由问题的解释 但没有找到有关控制器或模型的解释 我很确定这与社区当前的 DCI 趋势 有关 并且愿意尝试一下 问题是 我应该如何使
  • 在探索 Angular2 之前是否有必要先学习 TypeScript? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 在尝试学习 AngularJS 2 之前是否有必要先学习 TypeScript 没有必要学习 TypeScript 但我绝对建议您学习
  • C# 中防止子进程显示 shell 窗口

    我正在使用 ffmpeg 编译视频 我想防止它在执行操作时显示控制台 这是我启动 ffmpeg 的方法 ProcessStartInfo si new ProcessStartInfo si Arguments string Format
  • 编写自定义 webpack 解析器

    我计划使用一组更复杂的约定来将资源导入到我的 webpack 项目中 所以我正在尝试编写一个插件 该插件应该重写请求的模块定位器的部分 然后将其传递给解析器瀑布 https webpack js org development how to
  • ghc7.02 上的 runhaskell 错误

    我在 ghc7 0 2 上创建了一个 yesod 应用程序 当我使用命令时runhaskell devel server hs运行应用程序时 发生错误 GHCi runtime linker fatal error I found a du
  • 如何获取两个节点之间的最小路径的权重?

    我有一个Python 中的networkx 图 带有加权边 我想获得两个节点之间的最小路径的权重 目前 我从 nx shortest path 实现中获取最短路径中的节点 然后迭代每对并对每对节点之间的权重求和 shortest path
  • 为什么启用自动刷新后使用空打印?

    我在一段代码中发现了类似的东西 use IO Handle autoflush STDOUT 1 print 打印 的目的是清空可能已满的缓冲区吗 The print强制立即输出缓冲区中的所有文本 来自先前的打印 该代码基本上禁用缓冲并刷新
  • 在数据表过滤器表达式中转义字符的正确方法

    我想知道是否有一个函数可以正确转义过滤器表达式的字符串文字 例如 DataTable Select String Format name 0 MyName 如果 MyName 包含 或许多其他关键字符 则会生成异常 这微软文档 http m
  • 我可以在 VS 2008 的 Windows 窗体设计器中将默认修饰符从 Friend 更改为 Private 吗?

    当我使用 C 在 Visual Studio 中开发 Windows 窗体应用程序时 添加到窗体的每个控件默认标记为private 这就是我想要的 使用 VB NET 时 每个控件默认标记为Friend 相当于internal在 C 中 即
  • 为什么 jQuery .css('background-color') 返回 rgba(0,0,0,0) 表示“透明”?

    我这里有一个盒子 http jsfiddle net U68p3 2 http jsfiddle net U68p3 2 具有透明背景 当我用 jQuery 的 css background color 读取背景时 它返回 rgba 0 0
  • PHP Elastic Search 过滤查询字符串搜索

    所有人都希望使用过滤查询 其中结果应包含来自 query string 以及应用的 term filter 的数据 GET blog search query filtered query query string fields descr