Elasticsearch在php中匹配子字符串

2023-11-27

下面给出的是我使用elasticsearch生成索引的代码。索引已成功生成。基本上我用它来根据电影名称、演员名称和基因生成自动建议。

现在我的要求是,我需要将子字符串与特定字段相匹配。如果我使用,这工作正常$params['body']['query']['wildcard']['field'] = '*sub_word*';(即搜索“to”会给出“tom kruz”,但搜索“tom kr”不会返回结果)。

这仅匹配字符串中的特定单词。我想匹配包含多个单词的子字符串(即“tom kr”应该返回“tom kruz”)。

我发现很少有文档,说可以使用 'ngram'。 但我不知道,我应该如何在我的代码中实现它,因为我正在使用基于数组的 Elasticsearch 配置,并且所有支持文档都提到了 json fromat 中的配置。

请帮忙。

require 'vendor/autoload.php';

$client = \Elasticsearch\ClientBuilder::create()
->setHosts(['http://localhost:9200'])->build();

/*************Index a document****************/
$params = ['body' => []];
$j = 1;
for ($i = 1; $i <= 100; $i++) {
    $params['body'][] = [
        'index' => [
            '_index' => 'pvrmod',
            '_type' => 'movie',
            '_id' => $i
        ]
    ];
    if ($i % 10 == 0) 
        $j++;
    $params['body'][] = [
        'title' => 'salaman khaan'.$j,
        'desc' => 'salaman khaan description'.$j,
        'gener' => 'movie gener'.$j,
        'language' => 'movie language'.$j,
        'year' => 'movie year'.$j,
        'actor' => 'movie actor'.$j,
    ];

    // Every 10 documents stop and send the bulk request
    if ($i % 10 == 0) {
        $responses = $client->bulk($params);

        // erase the old bulk request
        $params = ['body' => []];

        unset($responses);
    }
}

// Send the last batch if it exists
if (!empty($params['body'])) {
    $responses = $client->bulk($params);
}

这里的问题在于Elasticsearch构建了倒排索引。假设您使用标准分析器,句子“tom kruz is a topgun”将被分为 6 个标记:tom - kruz - is - a - top -gun。这些标记被分配给文档(带有一些有关该位置的元数据,但我们暂时将其放在一边)。

如果您想进行部分匹配,则可以,但只能在单独的标记上进行,而不是按照您想要的那样超出标记的边界。分割搜索字符串并从这些字符串中构建通配符查询的建议是一个选项。

另一种选择确实是使用ngram or 边_ngram令牌过滤器。这样做(在索引时)是提前创建那些部分标记(例如 t - to - tom - ... - k - kr - kru - kruz - ...),您可以输入“tom kr”在您的(匹配)搜索中,它会匹配。但要小心:这会让你的索引膨胀(如你所见,它将存储更多的令牌),你需要定制分析仪并且可能对您的映射有相当多的了解。

一般来说,(edge_)ngram 路由仅适用于自动完成等操作,而不适用于索引中的任何文本字段。有几种方法可以解决您的问题,但大多数方法都涉及构建单独的功能来检测拼写错误的单词并尝试为其建议正确的术语。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Elasticsearch在php中匹配子字符串 的相关文章

  • 使用 Graph API 删除 facebook 帖子 - 无法正常工作

    我使用以下命令在我的 Facebook 页面上发布消息 attachment array access token gt access token message gt This is a test Message 4 name gt Th
  • 替代 header("Content-type: text/xml");

    是否存在与以下内容等效的内容 header Content type text xml 我将 Google 地图与 Wordpress 一起使用 但收到 标头已发送 错误 我已经检查了所有文件并删除了所有空白 但错误仍然出现 所以只是想知道
  • 如何让 PagerDefault 查询与 Drupal 7 一起正常工作?

    我正在运行以下代码 query db select taxonomy index ti gt fields ti array nid gt condition ti tid term gt tid gt condition n status
  • PHP:会话 |无法解码会话对象

    我尝试将电子商务功能添加到遗留项目中 因此我仍然需要旧的会话处理程序 我使用 PHP v7 1 14 和 Session2DB https github com voku session2db tree 4 0 0 https github
  • 图像上的文字

    是否可以在 php 中动态地将文本放置在图像上 然后将其发送到 rss feed 是的 可以使用GD http www php net gd函数或图像魔术师 http www php net imagemagick功能 具体取决于您的服务器
  • PHP和.htaccess认证解决方案

    这是布局 web root admin dir index php js img other files dirs dir files 到目前为止 我使用 htaccess passwd 保护管理目录 因为我希望对该目录中的所有文件 包括
  • 为什么不能将 MYSQL 函数传递到准备好的 PDO 语句中?

    在我看来 以下脚本应该有效 stmt db gt prepare UPDATE table SET status date modified stmt gt execute array 1 NOW 但经过时NOW 进入准备好的声明中 什么也
  • 如何重定向(标头位置)到 html 文件?

    所以我正在 php 中运行一个注册 登录系统 包括 MySQL 出于测试目的 成功登录后 我将用户重定向到 index php 该文件声明用户已登录 并为他提供注销选项 同时 我制作了一个计划使用的实际 html 页面 因此我只是添加了 i
  • PHP:将数组添加在一起

    有人可以帮我解释一下吗 我有两段代码 其中一个按我的预期工作 但另一个则不然 这有效 a array a gt 1 b gt 2 b array c gt 3 c a b print r c Output Array a gt 1 b gt
  • php 删除特定文件夹及其所有内容

    我正在使用 php 删除包含已删除帖子图像的文件夹 我正在使用下面的代码 这是我在网上找到的并且做得很好 我想知道当一个文件夹中有其他文件夹时 如何只删除其中的特定文件夹 当我使用下面的代码时 如何才能做到这一点 使用 dev images
  • PHP 版本如何匹配“API=yyyymmdd”签名/标签?

    是否有明确且可靠的来源来找出哪个 PHP 发行版本 x y z 携带 使用哪个 API yyyymmdd 签名 标签 PHP 的版本控制存储库是 PHP 版本与其 API 日期版本之间相关性的权威来源 请记住 仅主要版本PHP 的版本 例如
  • mysqli_stmt_bind_result 的奇怪问题

    好吧 这让我很烦恼 我似乎在 PHP 文档中找不到任何内容 在 Google resultosphere 中也找不到任何内容 所以也许有人可以在这里提供帮助 我正在使用准备好的语句 绑定结果 然后使用这些绑定结果来填充下拉列表 例子
  • php循环中的ajax在按钮单击时执行操作

    所以我有一个 php 循环 我使用 jquery 滑动切换来隐藏 显示带有 sql 结果的表 目前该表仅使用 php 加载 但由于发生了很多事情 导致了一些加载问题 我需要使用滑动切换 btn 来触发 ajax 因此它仅在按下按钮时请求当前
  • 有没有办法获取 PHP 中可用区域设置的列表?

    在Java中 你可以调用Locale getAvailableLocales 获取可用区域设置的列表 我期待 PHP 的同等功能Locale http php net manual en class locale php类 但找不到 有没有
  • 单击文件下载后,成功后使用 AJAX 重定向到另一个页面

    In my WordPress project my Download button containing a zip file which onClick should be downloaded So the HTML producin
  • Elasticsearch - 使用“标签”索引来发现给定字符串中的所有标签

    我有一个 elasticsearch v2 x 集群 其 标签 索引包含大约 5000 个标签 tagName tagID 给定一个字符串 是否可以查询标签索引以获取在该字符串中找到的所有标签 我不仅想要精确匹配 而且还希望能够控制模糊匹配
  • PHP filesize() 适用于除一个文件之外的所有文件,给出 stat failed 错误

    我正在编写一个 PHP 页面 该页面通过抓取现有 HTML 页面来生成播客提要 一切正常 但我的 mp3 文件之一出现 filesize stat failed 错误 据我所知 该文件没有损坏 并且播放得很好 我还将文件重新上传到服务器 它
  • 在 PHP 中创建关联数组

    我有一个多维数组 shop array array appn1 pub1 pub2 pub3 array appn2 pub1 array appn3 pub1 pub2 每个数组中的第一项是申请编号每个数组中的其余部分是出版号 我得到每个
  • 在php中获取真实IP的问题

    我用它来获取真实IP 但我从 SERVER HTTP CLIENT IP 我仅从 SERVER REMOTE ADDR 但是我不需要代理的IP 我需要使用某些内网的计算机的真实IP 我能得到它吗 什么时候 SERVER HTTP CLIEN
  • 从字符串中的链接中删除基本 URL

    我有一个带有图像链接的字符串 image link raw http website com files 2012 10 image001 png 现在我想删除http website com然后就得到 files 2012 10 imag

随机推荐

  • 如何使用jquery使图像沿圆形路径移动?

    在这里 我试图使图像沿圆形路径移动 但它没有沿圆形路径移动 我已经尝试过这样的缓慢移动图片 CSS friends position absolute Markup img src http jsfiddle net img logo pn
  • 如何让“git log”显示“svn log -v”等文件名

    SVN 的日志有一个 v 模式 它输出每次提交中更改的文件的文件名 如下所示 jes5199 svn log v r1 jes5199 2007 01 03 14 39 41 0800 Wed 03 Jan 2007 1 line Chan
  • 我可以在 iOS 的 Core Text 中使用 NSAttributedString 吗?

    我正在尝试弄清楚如何获取 NSAttributedString 并在 iPad 上的 Core Text 中使用它 我观看了 WWDC 视频 110 之一 其中有幻灯片 但没有源代码 它描述了如何创建 NSAttributedString
  • 如何在 PHP 中使用 Word Net

    如何在 php 中使用 word Net 是否有任何接口或任何类 我需要使用 wordnet 来实现我的词典目的 在下载页面上可以使用命令行工具进行下载 如果你启用了 exec 你可以从 php 使用它 http wordnet princ
  • 与 Qt 静态链接的应用程序出现错误:无法加载平台插件“windows”

    我已经在 Windows 7 x64 下的 VS 2010 中静态构建了 Qt 5 0 1 配置参数是 configure debug and release opensource confirm license platform win3
  • 使用 Jackson JSON 视图而不注释原始 bean 类

    有什么方法可以使用 Jackson JSON Views 或类似的东西 而不必注释原始 bean 类 我正在寻找某种运行时 动态配置来让我做类似的事情 我的豆子是一个 Entity打包在可由多个项目共享的 JAR 中 由于使用项目中的 UI
  • pandas sort_values 函数中 axis=1 的含义是什么? [复制]

    这个问题在这里已经有答案了 我有以下代码片段 df pd DataFrame col1 A A B np nan D C col2 2 1 9 8 7 4 col3 0 1 9 4 2 3 print df sorted df sort v
  • 如何使用 Delphi 7 将文本文件从 ANSI 转换为 UTF-8?

    我用 Delphi 7 编写了一个程序来搜索 srt硬盘上的文件 该程序在备忘录中列出这些文件的路径和名称 现在我需要将这些文件从 ANSI 转换为 UTF 8 但我还没有成功 Utf8Encode 函数采用 WideString 字符串作
  • 创建 ruby​​ C++ 扩展

    我使用 C 类创建了一个示例 ruby 扩展 当我没有解析该值时它工作正常 但是当我解析参数时它显示错误 这是我的代码 C 头文件 ifndef CIRCLE H define CIRCLE H class Circle public Ci
  • R 中的桑基图

    尝试在 R 的帮助下制作一个相当通用的桑基图networkD3包裹 仅供参考 这是软件包手册中的示例 library networkD3 library jsonlite library magrittr energy lt https c
  • 从 AngularJS Web 应用程序发送电子邮件

    在我的一个 AngularJS Web 应用程序中 我需要通过向相关人员发送电子邮件来确认密码 我怎样才能在 AngularJS 中实现这一点 我是一名 NET 人员 我正在使用 Visual Studio 2013 您还可以考虑使用第三方
  • WPF 子控件的鼠标悬停触发效果

    假设我有这段代码
  • 我的网站的移动版,什么设计宽度是最佳的? [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 我要创建移动版本的网站 设计时应该选择什么宽度 我知道每个设备都有自己的屏幕宽度 并且很难适应所有设备 我真的很困惑 对移动网站世界来说相当陌生 请帮忙 谢谢 您的方法将取决于您想要 或可
  • Node.js 有模板引擎吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 我正在尝试使用 Node
  • 删除 iOS UIBarButtonItem 的标题文本

    我想做的是从 后退 按钮中删除文本UIBarButtonItem 在导航栏上只留下蓝色 V 形 请记住 我正在针对 iOS 7 进行开发 我尝试了多种方法 包括但不限于 这是我不喜欢的图像方法 图像看起来不合适 UIBarButtonIte
  • 在 jupyter 中使用带有 bash 魔法的 python 变量

    我想使用 jupyter 笔记本中运行 bash 命令 bash魔术命令并传递 python 变量 如中所述这个帖子我可以这样做 bash s foo bar cp 1 2 这很好用 然而 当我有一堆这些变量并且 bash 命令很长时 使用
  • MediaRecorder 启动失败:-38

    我搜索了一下这个问题是否没有重复 我看到有些没有答案 有些没有帮助 这是我的代码 private void startRecording mRecorder new MediaRecorder mRecorder setAudioSourc
  • 如何捕获 printf 的输出?

    我正在调用一个函数funcB from funcA funcB使用几个printf语句来输出数据 有没有办法让我通过捕获该数据funcA 我无法修改funcB funcB printf s My Name is printf s I lik
  • 自动重构工具可以找到类似的 Java/Javascript 重复源代码吗? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我正在寻找一个工具来查找重复或similarJava Javascript 代码 我无法说出 的确切定义 similar 但我希望该工具足够智能 并
  • Elasticsearch在php中匹配子字符串

    下面给出的是我使用elasticsearch生成索引的代码 索引已成功生成 基本上我用它来根据电影名称 演员名称和基因生成自动建议 现在我的要求是 我需要将子字符串与特定字段相匹配 如果我使用 这工作正常 params body query