elasticsearch:如何索引仅是停用词的术语?

2023-12-04

我在后台使用 elasticsearch 构建了自己的小搜索,取得了很大的成功。但有一件事我在文档中找不到。

我正在索引音乐家和乐队的名字。有一个名为“The The”的乐队,由于停用词列表,该乐队从未被索引。

我知道我可以完全忽略停用词列表,但这不是我想要的,因为搜索“the who”等其他乐队的结果会爆炸。

那么,是否可以将“The The”保存在索引中,但根本不禁用停用词?


您可以使用同义词过滤器转换The The成单个令牌,例如thethe停用词过滤器不会删除它。

首先,配置分析器:

curl -XPUT 'http://127.0.0.1:9200/test/?pretty=1'  -d '
{
   "settings" : {
      "analysis" : {
         "filter" : {
            "syn" : {
               "synonyms" : [
                  "the the => thethe"
               ],
               "type" : "synonym"
            }
         },
         "analyzer" : {
            "syn" : {
               "filter" : [
                  "lowercase",
                  "syn",
                  "stop"
               ],
               "type" : "custom",
               "tokenizer" : "standard"
            }
         }
      }
   }
}
'

然后用字符串测试一下"The The The Who".

curl -XGET 'http://127.0.0.1:9200/test/_analyze?pretty=1&text=The+The+The+Who&analyzer=syn' 

{
   "tokens" : [
      {
         "end_offset" : 7,
         "position" : 1,
         "start_offset" : 0,
         "type" : "SYNONYM",
         "token" : "thethe"
      },
      {
         "end_offset" : 15,
         "position" : 3,
         "start_offset" : 12,
         "type" : "<ALPHANUM>",
         "token" : "who"
      }
   ]
}

"The The"已被标记为"the the", and "The Who" as "who"因为前面的"the"已被停用词过滤器删除。

停下还是不停下

这让我们回到是否应该包含停用词的问题?你说:

I know I can ignore the stop words list completely 
but this is not what I want since the results searching 
for other bands like "the who" would explode.

你是什​​么意思?怎么爆?索引大小?表现?

最初引入停用词是为了通过删除可能对查询的相关性几乎没有影响的常用词来提高搜索引擎性能。然而,从那时起我们已经取得了很大的进步。我们的服务器的功能比 80 年代要强大得多。

索引停用词不会对索引大小产生巨大影响。例如,要索引单词the意味着向索引添加单个术语。您已经有数千个术语 - 对停用词建立索引不会对大小或性能产生太大影响。

其实更大的问题是the非常常见,因此对相关性的影响很小,因此搜索"The The concert Madrid"会更喜欢Madrid超过其他条款。 这可以通过使用来缓解shingle过滤器,这将导致这些标记:

['the the','the concert','concert madrid']

While the可能很常见,the the不是,所以排名会更高。

您不会单独查询叠瓦字段,但可以将对标准分析器标记化的字段(无停用词)的查询与对叠瓦字段的查询结合起来。

我们可以使用多字段来分析text领域有两种不同的方式:

curl -XPUT 'http://127.0.0.1:9200/test/?pretty=1'  -d '
{
   "mappings" : {
      "test" : {
         "properties" : {
            "text" : {
               "fields" : {
                  "shingle" : {
                     "type" : "string",
                     "analyzer" : "shingle"
                  },
                  "text" : {
                     "type" : "string",
                     "analyzer" : "no_stop"
                  }
               },
               "type" : "multi_field"
            }
         }
      }
   },
   "settings" : {
      "analysis" : {
         "analyzer" : {
            "no_stop" : {
               "stopwords" : "",
               "type" : "standard"
            },
            "shingle" : {
               "filter" : [
                  "standard",
                  "lowercase",
                  "shingle"
               ],
               "type" : "custom",
               "tokenizer" : "standard"
            }
         }
      }
   }
}
'

然后使用一个multi_match查询来查询该字段的两个版本,为叠瓦版本提供更多“提升”/相关性。在这个例子中text.shingle^2意味着我们想要将该字段提高 2:

curl -XGET 'http://127.0.0.1:9200/test/test/_search?pretty=1'  -d '
{
   "query" : {
      "multi_match" : {
         "fields" : [
            "text",
            "text.shingle^2"
         ],
         "query" : "the the concert madrid"
      }
   }
}
'
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

elasticsearch:如何索引仅是停用词的术语? 的相关文章

  • 外键和索引

    我有 2 张桌子 products and 类别 每个类别有很多产品 一个产品可以属于多个类别 products product id int primary auto increment name unique etc 类别 catego
  • AWS ElasticSearch Service - 从 CF 模板设置加密选项

    我正在创建一个云形成模板来在AWS中配置elasticsearch服务域 我想将加密下的此属性设置为 true 域的所有流量都需要 HTTPS 但我无法在 AWS 文档中找到执行此操作的方法 用于设置加密属性的其他选项 例如 启用静态数据加
  • 如何在 R 中的 for 循环内将值存储在向量中

    我正在开始使用 R 但我对以下问题感到非常沮丧 我试图将 for 循环内完成的某些计算的值存储到我之前定义的向量中 问题是如何进行索引 因为for循环迭代代码的次数取决于用户的输入 所以变量i不一定要从1开始 它可以从80开始 for举个例
  • 在“spring-data-elasticsearch”4.0.4.RELEASE中,如何将SearchHits转换为Page?

    In spring data elasticsearch4 0 4 发布 ElasticsearchRestTemplate s queryForPage 方法已弃用 需要使用search 相反 它返回SearchHits代替Page 那么
  • 切片 Dataframe 时出现 KeyError

    我的代码如下所示 d pd read csv Collector Output csv df pd DataFrame data d dfa df copy dfa dfa rename columns OBJECTID Object ID
  • 使用文件的 AWS Elasticsearch 同义词

    我正在尝试使用文件将同义词添加到弹性搜索 如本链接所示 但它给了我以下错误https www elastic co guide en elasticsearch reference 5 2 analysis synonym tokenfil
  • 猫鼬不创建索引

    我最近开始使用 Mongoose v 3 2 1 但我遇到了索引问题 我在我的模式 Schema path attr index true 上定义了几个索引 但它们不是在数据库中创建的 我在 shell 中运行 db collection
  • 获取 Pandas 数据框中选定值的行和列标签

    我想获取与数据框中某些条件匹配的值的行和列标签 为了保持它的趣味性 我需要它与分层 多 索引一起使用 例如 df pd DataFrame np arange 16 reshape 4 4 columns pd MultiIndex fro
  • Elasticsearch 无法获取颁发者证书

    我正在尝试使用 LetsEncrypt 加密 tls 证书 但我的服务器页面显示 Kibana server is not ready yet 这是错误 etc kibana kibana yml type log timestamp 20
  • 如何在 Postgresql 中将 GIST 或 GIN 索引与 hstore 列一起使用?

    我正在使用 postgresql 9 3 的 hstore 我正在尝试对 hstore 列使用索引就像文档所述 http www postgresql org docs 9 3 static hstore html 我的问题是索引似乎没有被
  • 在 ElasticSearch 中,我应该对单独但相关的实体使用多个索引吗?

    添加索引的开销有详细记录 但我无法找到有关何时针对要建立索引的各种文档类型使用多个索引的良好信息 这是一个说明问题的通用示例 假设我们有以下实体 产品 名称 产品 ID 产品类别 ID 商店列表 产品类别 名称 ProductCategor
  • 创建索引可以使用现有索引吗?

    我在 A B 和 C 列上有单独的索引 我想在 A B C 三列上创建一个复合索引 我的会有什么影响existing指数对综合指数creation 数据库会利用它们吗 它们是否无关紧要 或者它们会减慢我的新复合索引的创建速度吗 我正在使用
  • 在 Must bool 查询中使用正则表达式搜索与使用 Must_not bool 查询

    我想进行类似的查询 获取包含 不包含给定字段的 某些值 的所有文档 获取给定字段的值等于 不等于 某个值 的所有文档 根据我的映射 字段是字符串类型 这意味着它们支持关键字和全文搜索 例如 myField type text fields
  • 使用 python 聚合 elasticsearch-dsl 中的字段

    有人可以告诉我如何编写 Python 语句来聚合 求和和计数 有关我的文档的内容吗 SCRIPT from datetime import datetime from elasticsearch dsl import DocType Str
  • PostgreSQL 如何对字段上的 b 树索引执行 ORDER BY?

    我有一张桌子bsort CREATE TABLE bsort a int data text Here data可能不完整 换句话说 某些元组可能没有data value 然后我在表上建立一个 B 树索引 CREATE INDEX ON b
  • 使用 Ruby on Rails 索引多列

    我在 Mysql 数据库中有一个表 我想在其上使用多列索引 如何在不使用 mysql 控制台的情况下在 Rails 中执行此操作 在迁移定义中 您可以这样做 add index table name column1 column2
  • Elasticsearch NodeBuilder 与 TransportClient

    对于其他 Elasticsearch 开发人员来说 这可能是一个非常简单 而且愚蠢 的问题 这两者之间有什么区别 我正在从 Java Web 应用程序连接到远程 Elasticsearch 服务器 到目前为止我一直在使用 Transport
  • 如何使用 monolog ElasticSearchHandler 登录 Laravel 应用程序

    Monolog 包含弹性搜索处理程序和格式化程序 但它作为自定义通道对 Laravel 的实现并不像 Laravel 文档网站上描述的那么简单 以下是如何执行此操作的简要分步说明 为您的弹性搜索日志记录创建一个配置文件 config ela
  • 使用绑定和空值命中 Oracle 索引的最佳查询

    我有一个表 该表在多个列上有一个索引 其中许多列可以为空 CREATE UNIQUE INDEX UX MYTABLE A B C D E ON MYTABLE A B C D E 现在 我在 C 代码中尝试检查该表并精确命中索引 对于每个
  • 为什么 Mongohint 可以使查询运行速度提高 10 倍?

    如果我使用explain 从shell运行mongo查询 获取所使用的索引的名称 然后再次运行相同的查询 但使用hint 指定要使用的相同索引 解释计划中的 millis 字段是显着下降 例如 没有提供任何提示 gt gt db event

随机推荐

  • 通过字距调整动态调整文本大小以占据 UILabel 的整个宽度

    我有一个布局UILabel放置在固定宽度视图上方 如下所示为灰色矩形 文本需要匹配固定灰色视图的宽度 我通过设置实现了这一点adjustsFontSizeToFitWidth财产在UILabel to YES 将字体大小设置为非常大的值 然
  • THttprio onBeforeExecute 更改soapRequest

    我已经为一个项目导入了一些 wsdl 我想更改 HttpRio onBeforeExecute 事件上的 SoapRequest 但是 当我更改请求时 我收到一些错误 如何更改请求 xml 文件 在此事件上使用 stringReplace
  • Docker - 如何访问未附加到容器的卷?

    我有一个数据容器 其中有一个由其他容器使用的卷 volumes from 数据容器被意外删除 值得庆幸的是 该卷没有被删除 有什么方法可以重新运行数据容器并将其指向该卷吗 有什么方法可以重新运行数据容器并将其指向该卷吗 当然 我在 如何从已
  • 派生对象的模板是基类型模板的子类

    如果 apple 是 fruit 的子类 那么List
  • 如何使用 iText 在 Web 环境中通过智能卡签署 PDF?

    阅读以下参考文献 iText 数字签名白皮书 and C 示例 具体来说第4章 对于那些有兴趣的人 另一个精彩而简洁的总结PDF 签名过程 CAPICOM 文档 此处和 iText 邮件列表档案上的在线示例 问题 例如here and he
  • Jekyll 插件中的“优先级”标志应该如何工作?

    我目前正在尝试为 Jekyll 开发一个插件 这将有助于使用云数对于响应式图像 当前源是在我的 Github 仓库中 稍后当 如果它有效时 我会将其变成宝石 这个插件有两个特点 用于定义 Cloudinary 图像的 Liquid 标签 例
  • 如何对没有逻辑的类进行单元测试?

    我发现为算法编写单元测试很容易 例如 sort List 很容易编写如下测试 list 2 1 4 assert sort list 1 2 4 但我发现测试没有逻辑的方法真的很难 没有if语句 只是一组调用 我主要想知道如何对它们进行单元
  • Codeigniter - 无法调用系统的 lang() 函数

    尝试调用属于 codeigniter 系统 帮助程序 language helper php 一部分的 lang 函数 导致致命错误 Fatal error Call to undefined function lang def actio
  • facebook feed 方法链接默认添加 fb_ref=Default 在最后如何删除

    我正在使用 feed 方法从我的网站使用 asp net 和 jquery javascript 发布到我的 facebook 墙 最初它工作正常 但突然在最后的链接中添加了 fb ref Default 我不知道为什么会发生我想删除请帮助
  • 使用 ARC 避免出现悬空指针

    我有一个物体 里面有一个strong对对象的引用 property nonatomic strong NSObject thing 在其他地方 我有一个传递对象引用的方法 thirdObject doSomething secondObje
  • 对 MySQL 表中的行重新排序

    我有一张桌子 ID Name Order 1 John 1 2 Mike 3 3 Daniel 4 4 Lisa 2 5 Joe 5
  • 无法使用 http/https 将 Git 推送到远程存储库

    我在服务器上的 apache 提供的目录中有一个 Git 存储库 我已经配置了 WebDAV 并且它似乎运行正常 Litmus 返回 100 成功 我可以从远程主机克隆我的存储库 但是当尝试推送 http 或 https 时 出现以下错误
  • Azure SQL 数据仓库的简单性能测试

    我们正在努力将现有应用程序移植到 Azure SQL 数据仓库 为了更好地了解 Azure SQL 数据仓库的性能 工作负载管理特征 功能 我设置了一个我认为非常简单的测试 我加载了一个静态表 即我们企业的日历 包含大约 20k 行 即对于
  • 能够使用附近连接同时向多个设备发送消息/字节

    为了尝试附近的 API 我决定构建一个应用程序 允许老师跟踪学生在课堂上的出勤情况 类似于什么张嘉伦是在做 我已经经历了谷歌关于剪刀石头布和对讲机的示例代码 但似乎只有一个设备可以连接在任何一个时间当我使用 4 部手机测试样本时 我想构建一
  • 使用 selenium 滚动抓取 javascript 表

    我正在尝试抓取通过 javascript 生成的表格 但我很挣扎 到目前为止我的代码是 driver webdriver Chrome driver get https af ktnlandscapes com get table firs
  • 如何导出具有依赖关系的 SVN 存储库的一部分?

    我正在尝试使用迁移 SVN 存储库的一部分svnadmin dump 提供的 svndumpfilter 工具不管理导出中未包含的目录的复制 移动 重命名依赖项 有没有一个工具可以管理这些依赖关系 我发现了 Simon Tatham 的一个
  • 为每个类别选择 N 条记录并按 X 排序

    我有一个包含博客文章的数据库表 我想在主页上显示每个类别的一篇 或多篇 帖子 例如按日期排序 所以我的帖子表如下所示 id title description cat filename date 我将如何创建这样的查询 我想过使用 grou
  • 如何计算正弦曲线两端的面积

    给定这个数据集 y lt c 13 16 35 40 28 36 43 33 40 33 22 5 27 31 29 25 26 31 26 24 25 29 23 4 t lt 1 24 我的目标是计算两个面积 第一个区域将仅集成来自零线
  • 使用 Grunt Uglify 进行动态映射和连接

    我正在尝试使用动态映射并使用 Grunt Uglify 连接 Javascript 文件 我有以下无法正常工作的情况 这是我的文件夹结构 javascript account custom js bills billing one js b
  • elasticsearch:如何索引仅是停用词的术语?

    我在后台使用 elasticsearch 构建了自己的小搜索 取得了很大的成功 但有一件事我在文档中找不到 我正在索引音乐家和乐队的名字 有一个名为 The The 的乐队 由于停用词列表 该乐队从未被索引 我知道我可以完全忽略停用词列表