问题标签 [elasticsearch-analyzers]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
93 浏览

elasticsearch - Elasticsearch - 我可以在文档级别定义索引时间分析器吗?

我想将多种语言的页面索引到一个索引中。但是对于每种语言,我都需要定义自定义语言分析器。因此,对于英文页面,它将使用英语分析器,对于捷克页面,它将使用捷克分析器。

在搜索时,我会根据当前语言环境设置正确的分析器,因为我不需要跨语言搜索。

似乎在 Elasticsearch 的早期版本中是可能的,但我在 7.6 中找不到方法

有没有办法实现这一点,还是我真的需要为每种语言的每种类型创建一个索引?这将导致许多索引只有少量索引文档。

还是有更好的方法来处理这种情况?我们正在考虑大约 20 种语言和几种文档类型(据我了解,类型现在已被弃用,因此每种类型都需要自己的索引)。

0 投票
1 回答
927 浏览

elasticsearch - 模式分析器不适用于弹性搜索中的 UUID

我正在使用elasticsearch 7.x 版并使用以下映射创建了一个帐户索引。

我将用户存储为一个数组。在我的用例中,一个帐户可以有 n 个用户。所以我以以下格式存储它。

为了根据用户 ID 及其状态进行搜索,我创建了一个模式分析器,它由 ~~ 符号分割,如下所示。

搜索查询调用是

如果用户标识格式是纯字符串,这确实有效。也就是说,如果用户 id 以非 UUID 格式存储,则效果很好。但它不适用于 UUID 格式的 id 。如何使这个工作?

0 投票
1 回答
234 浏览

elasticsearch - 在 Elasticsearch 中搜索部分单词的愿望功能不返回任何内容。仅适用于完整的单词

我尝试了两种不同的方法来创建索引,如果我搜索单词的一部分,它们都会返回任何内容。基本上,如果我在单词中间搜索第一个字母或字母,我想获得所有文档。

通过这样创建索引的第一个尝试(其他stackoverflow问题有点老):

通过以这种方式创建索引的第二个尝试(其他最近的 stackoverflow 问题

这第二个尝试失败了

Kibana 打印屏幕

尽管我创建索引的第一种方式是无一例外地创建了索引,但当我键入部分属性“nome”时它不起作用。

我以这种方式添加了一个文档

现在我想通过输入第一个字母(例如De)或从中间输入部分单词(例如met)来检索上述文档。但是我正在搜索的以下两种方法都不是检索文档

简单的查询方法:

更详细的查询方式也失败了

我认为不相关,但这里是版本(我正在使用这个版本,因为它旨在使用 spring-data 在生产中工作,并且在 Spring-data 中添加 Elasticsearch 较新版本存在一些“延迟”)

PS.:请不要建议我使用正则表达式,也不要使用通配符(*)。

*** 已编辑

以下所有步骤均在控制台中完成 - Kibana/Dev Tools

步骤1:

右侧面板上的结果:

第2步:

右侧面板上的结果:

第 3 步:

右侧面板上的结果:

如果相关:

在获取 url 上添加了文档类型

也没有带来任何东西:

搜索整个标题文本

带来文件:

查看它感兴趣的索引没有看到分析器:

右侧面板上的结果

我如何运行 Elasticsearch 和 Kibana

0 投票
1 回答
60 浏览

elasticsearch - Elasticsearch - at&t 和 procter&gamble 案例

默认情况下,带有英语分析器的 Elasticsearch 会分解at&t为 tokens att然后at作为停用词删除。

结果令牌看起来像:

我希望能够精确匹配at&t,同时能够procter&gamble精确搜索并且能够搜索例如 only procter

所以我想构建一个分析器,它 为字符串 at&t和, ,为.tat&tproctergamblprocter&gambleprocter&gamble

有没有办法创建这样的分析器?或者我应该创建 2 个索引字段 - 一个用于常规英语分析器,另一个用于English except tokenization by &

0 投票
2 回答
62 浏览

elasticsearch - Elasticsearch `Procter&Gamble` 和 `Procter & Gamble` 问题

我的任务是: * 制作procter&gambleprocter & gamble 产生相同的结果,包括分数 * 使其具有通用性,而不是通过同义词,因为它可以是任何其他Somehow&Somewhat * 突出显示procter&gambleprocter & gamble,如果短语匹配,则不是单独的标记 * 我想使用simple_query_string,因为我允许搜索运算符 *也AT&T可搜索

这是我的片段。procter&gambleprocter & gamble搜索产生不同分数的问题和这个不同的文件作为结果。但用户期望procter&gamble或得到相同的结果procter & gamble

在我的代码片段中,我使用word_delimiter_graphwhitespace标记器重新定义了默认分析器来搜索AT&T匹配项。

0 投票
2 回答
166 浏览

elasticsearch - Elasticsearch:使用分析器组合时搜索如何工作?

我是 Elasticsearch (ES) 的新手,在搞乱分析器。正如文档所述,分析器可以指定“索引时间”和“搜索时间”,具体取决于用例。我的文档有一个文本字段title,并且我定义了以下引入子字段的映射custom

因此,如果我有文本 : "email-id is someid@someprovider.com"standard-analyzer则会在索引期间将文本分析为以下标记: [email, id, is, someid, someprovider.com]

但是,每当我尝试在该字段上进行查询(查询术语有不同的变化)title.custom时,它都会导致没有命中。

当我使用关键字查询时,这就是我认为正在发生的事情email::

  1. 它由关键字分析器进行分析。
  2. 字段 title.custom 的值也被关键字分析器分析(分析标记),产生与前面提到的相同的标记集。
  3. 完全匹配应该发生在email令牌上,返回文档。

显然情况并非如此,我的理解存在差距。

  • 我想知道搜索过程中到底发生了什么。
  • 在一般层面上,我想知道当指定搜索和索引分析器的组合时分析和搜索是如何发生的。
0 投票
1 回答
337 浏览

elasticsearch - 用于排除逗号和
标签的 Elasticsearch 模式标记器

element字段使用逗号分隔的值进行索引,例如dog,cat,mouse. 我正在使用此分析器将上述值拆分为 3 个元素dogcat并且mouse

ES 配置

映射

这很好用,但我也可以获得类似的值dog<br>cat,但我不知道如何使用模式标记器根据逗号 <br>标签拆分值

0 投票
1 回答
44 浏览

elasticsearch - Elasticsearch“keep_types”过滤器不适用于“模式”标记器

我在使用带有“模式”标记器的“keep_types”过滤器时遇到问题,这是一个示例:

针对 _analyze API 的结果是:

如果我删除 keep_types 它会按预期工作。

我还注意到,如果我使用“标准”分析器,它可以正常工作,但在这种情况下,它不会以所需的方式标记文本。

我使用的是 6.8 版本,但也在 7.5 中尝试了相同的结果...

有任何想法吗?

0 投票
0 回答
38 浏览

elasticsearch - 弹性搜索将多词标记组合到单个标记

基本上,假设我有一个词汇表短语

假设我有 3 个文件

通过使用空格标记器,将在索引中识别以下标记

但是,由于我有一个已知的“词汇表”,我想用词组标记化并实现以下目标

给定词汇表中的短语列表,如何实现短语标记化?

0 投票
1 回答
58 浏览

elasticsearch - 我们如何在弹性搜索查询中使少量标记成为短语

我想搜索查询的一部分以被视为短语。例如,我想搜索“你能向我展示酒店和航空业的文件吗”在这里我希望将航空业视为短语。我在 multi_match 中找不到任何此类设置. 即使我们尝试使用 multi_match 查询,使用 "Can you show me documents for Hospitality 和 \"Airline Industry\"" 。默认分析器将其分解为单独的标记。我不想更改分析器的设置。而且我发现我们可以在 simple_query_string 中执行此操作,但这会导致我们无法像在 multi_match 布尔查询中那样应用过滤器选项,因为我也想在某些字段上应用过滤器。

search_text="Can you show me documents for Hospitality and Airline Industry" 现在我想将 Airline Industry 作为短语传递,以针对 2 个字段搜索我的索引文档。好的,所以说我有这样的现有代码。

'但后来我意识到,即使我传递了这样的搜索字符串,我也意识到这段代码没有将航空业作为一个短语来处理,“你能给我看一下酒店业和“航空业”的文件吗?”

根据弹性搜索文档,我知道有这个查询可以处理这个

但是现在我的问题是,如果用户想要应用过滤器..with 过滤器查询,我无法通过 simple_query_string' 传递短语和布尔查询