问题标签 [elasticsearch-5]

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 回答
444 浏览

elasticsearch - 使用 ngram 在文本中搜索搜索模式的最小字符及以上

我的弹性服务器中有一个文本索引。我已经实现了一个这样的 ngram 标记器:

可以说我的数据是

“你好美丽的世界”

当我放置一个查询匹配“地狱”时,我希望它只找到我的第一个单词(Hello)而不是单词 ell,所以基本上我不希望它“破坏”我的搜索模式只是为了在我的数据中找到它是(有 4 个字符且不低于)

谢谢

0 投票
0 回答
193 浏览

elasticsearch - Elasticsearch 使用模糊搜索过滤查询

我最近遇到了渗透查询,我想知道它是否可以与模糊搜索选项一起使用?我正在按照链接中给出的示例进行操作,并注意到如果有拼写错误,则它不匹配,所以我想知道是否有办法使用模糊搜索来解决这个问题。

0 投票
1 回答
1095 浏览

ruby-on-rails - 您如何将摄取附件插件与 elasticsearch-rails 一起使用?

我之前使用的是现在已弃用的 mapper-attachments 插件,它与普通索引一起使用相当容易。现在 ingest-attachment 已经取代了它并需要管道等。如何正确使用它变得令人困惑。

假设我有一个名为 的模型Media,它有一个file包含 base64 编码文件的字段。我在该文件中有以下映射:

我通过 curl 创建了一个附件管道:

现在,以前一个简单的Media.last.__elasticsearch__.index_document就足以file通过mapper-attachments插件索引记录以及实际记录。

我不确定如何ingest-attachment使用管道和elasticsearch-railsgem 来做到这一点。

我可以通过 curl 执行以下 PUT:

这将索引编码文件,但显然它不会索引模型的其余数据(或者如果它之前被索引,则完全覆盖它)。我真的不想在 curl 命令中包含每个模型属性以及文件。有没有更好或更简单的方法来做到这一点?我是否完全没有管道并且摄取应该工作?

0 投票
1 回答
523 浏览

elasticsearch - 使用 ngram 和空白分析器突出显示部分单词

我有一个包含以下数据的弹性搜索索引:

“A-Team”(例如)

我的索引设置是:

当我搜索:

我希望得到突出显示的结果:

但我根本没有得到任何亮点。

我使用空格进行搜索并使用 ngram 进行索引的原因是我不想在搜索阶段破坏我正在搜索的单词,就像如果我正在搜索“Team”它会找到我“Tea”、“eam”、团队”

谢谢

0 投票
1 回答
252 浏览

elasticsearch - Elasticsearch 聚合:每个父母的最新孩子的总和

在 Elasticsearch 中有一个父子结构表示一个orderorder_revision孩子的我想生成一个直方图,price显示quantity.

以下聚合基本上有效,但返回所有现有修订的总和。

在最终版本中,它应该只返回每个订单的最新版本(最高/最新)的quantity字段总和。我不完全确定如何提出这样的聚合,它按分组并只选择最新的孩子,我也不确定这个父子结构是否是对这些数据建模的最佳选择。timestamporder_id

0 投票
0 回答
388 浏览

mysql - 带有 MySql 数据库的 Elasticsearch 5.1

我必须在我的项目中使用弹性搜索进行搜索。我是那个领域的新玩家。我花了一些时间在上面,我开始知道它是如何存储数据的,它是如何工作的等等。但是我对使用 MySql 的 Elasticsearch 有一些疑问。喜欢,

  • 如何将关系表(MySql 的规范化表)索引到 Elasticsearch?我想我有两个选择。即,(i)索引 MySql 表,就像它在 Elasticsearch 中一样,并在搜索时使用两个搜索查询从两个表(例如,用户和联系人)中搜索数据。(ii)从 MySql 表中获取所有父子记录并创建嵌套 JSON 并在 Elasticsearch 中对其进行索引。但我不认为这是正确的方法。
  • 如何在 MySql 记录更改时更新 Elasticsearch 中的文档?
  • 如何将 MySql 的 JOIN 查询转换为 Elasticsearch 的搜索查询?或者我必须为每个表进行两次单独的搜索调用。

因此,当主题与 MySql 一起出现时,脑海中会出现很多混乱。我已经在网上搜索过了。但我发现博客只与基础知识有关,与 MySql 无关。如果有人能很好地解释这一点,将不胜感激。

0 投票
1 回答
11070 浏览

elasticsearch - 使用邮递员创建索引时在 Elasticsearch 中出错

我已经在 ubuntu 14.04 中安装了 Elasticsearch 5.1。我在 Elasticsearch 中执行了一些操作,例如创建索引、删除索引等。然后我安装了 Kibana 5.1。现在我想使用邮递员(localhost:9200/my_index with PUT)在elasticsearch中创建新索引。但我收到了这个错误。

我记得我曾经用作country索引或类型。但后来我清除了 elasticsearch 和 kibana(也删除了与这些相关的目录)。重新安装了两个。但仍然收到此错误。如果有人知道解决方案,将不胜感激。

这是一些查询的输出,您可能需要解决问题。

获取本地主机:9200/_mapping

{ ".kibana": { "mappings": { "server": { "properties": { "uuid": { "type": "keyword" } } }, "config": { "properties": { "buildNum ": { "type": "keyword" } } } } } }

(GET) localhost:9200/_cat/indices?v

[ {“健康”:“黄色”,“状态”:“打开”,“索引”:“.kibana”,“uuid”:“O_ORG0ONQNCEe8JU_C0SKQ”,“pri”:“1”,“rep”:“1” ,“docs.count”:“1”,“docs.deleted”:“0”,“store.size”:“3.1kb”,“pri.store.size”:“3.1kb”}]

(GET) 本地主机:9200/国家

{“错误”:{“root_cause”:[{“类型”:“index_not_found_exception”,“原因”:“没有这样的索引”,“resource.type”:“index_or_alias”,“resource.id”:“国家”, “index_uuid”:“ na ”,“index”:“country”}],“type”:“index_not_found_exception”,“reason”:“没有这样的索引”,“resource.type”:“index_or_alias”,“resource.id “:“国家”,“index_uuid”:“ na ”,“索引”:“国家”},“状态”:404 }

0 投票
1 回答
2622 浏览

elasticsearch - kibana 无法连接到服务器弹性搜索索引 - ECONNREFUSED

我有运行有索引的弹性搜索服务器,比如服务器 XX.XXX.XXX.XXX:9200。

我在服务器 ES 集群 XX.XXX.XXX.XXX:9200 中有索引,我正在尝试在我的 localhost:5601 (Kibana) 中为其创建仪表板

在我的 kibana.yml 我有这个配置:

在 Elasticsearch.yml 我有这个配置:

但是在运行 kibana.yml 时出现此错误:

连接 ECONNREFUSED http://XX.XXX.XXX.XXX:9200 无法在 http://XX.XXX.XXX.XXX:9200 连接到ElasticSearch

谁能告诉我我在哪里做错了让 kibana 启动并使用 ES 的服务器索引运行?

0 投票
2 回答
2781 浏览

elasticsearch - 分面搜索的后过滤器和全局聚合有什么区别?

搜索界面中的一个常见问题是您希望返回结果的选择,但可能希望返回有关所有文档的信息。(例如,我想查看所有红色衬衫,但想知道还有哪些其他颜色可用)。

这有时被称为“分面结果”或“分面导航”。Elasticsearch 参考中的示例非常清楚地解释了为什么/如何,所以我用它作为这个问题的基础。

摘要/问题:看起来我可以为此使用后过滤器或全局聚合。它们似乎都以不同的方式提供完全相同的功能。他们可能有我看不到的优点或缺点?如果是这样,我应该使用哪个?

我在下面包含了一个完整的示例,其中包含一些文档和基于参考指南中示例的两种方法的查询。


选项 1:后过滤器

请参阅Elasticsearch 参考中的示例

我们可以做的是在我们的原始查询中有更多的结果,所以我们可以聚合这些结果,然后过滤我们的实际结果。

这个例子解释得很清楚:

但也许您还想告诉用户有多少 Gucci 衬衫有其他颜色可供选择。如果您只是在颜色字段上添加术语聚合,则只会返回红色,因为您的查询仅返回 Gucci 的红色衬衫。

相反,您希望在聚合期间包含所有颜色的衬衫,然后仅将颜色过滤器应用于搜索结果。

请参阅下面的示例代码中的外观。

一个问题是我们不能使用缓存。这在(5.1 版尚不可用)elasticsearch 指南中警告过:

性能考虑 仅当您需要对搜索结果和聚合进行差异过滤时才使用 post_filter。有时人们会使用 post_filter 进行常规搜索。

不要这样做!post_filter 的性质意味着它在查询之后运行,因此过滤(例如缓存)的任何性能优势都完全丧失了。

post_filter 应该仅与聚合结合使用,并且仅在您需要差分过滤时使用。

然而,有一个不同的选择:

选项 2:全局聚合

有一种方法可以进行不受搜索查询影响的聚合。所以不是得到很多,聚合然后过滤,我们只是得到过滤后的结果,但对所有内容进行聚合。看看参考资料

我们可以得到完全相同的结果。我没有读到任何关于缓存的警告,但似乎最终我们需要做同样多的工作。所以这可能是唯一的疏忽。

global由于我们需要子聚合(你不能拥有和 afilter在同一个“级别”上),所以它稍微复杂一点。

我读到的关于使用此查询的唯一抱怨是,如果您需要对多个项目执行此操作,您可能必须重复自己。最后,我们可以生成大多数查询,所以重复自己对我的用例来说并不是什么大问题,而且我并不认为这是一个与“不能使用缓存”相提并论的问题。

问题

似乎这两个功能至少重叠,或者可能提供完全相同的功能。这让我很困惑。除此之外,我想知道其中一个是否具有我没有看到的优势,以及这里是否有任何最佳实践?

例子

这主要来自过滤后参考页面,但我添加了全局过滤查询。

映射和文档

我们现在要求所有红色 gucci 衬衫(第 1 项和第 3 项),我们为这 2 件衬衫提供的衬衫类型(修身和普通),以及 gucci 有哪些颜色(红色和蓝色)。

首先,一个后过滤器:获取所有衬衫,聚合红色 gucci 衬衫的模型和 gucci 衬衫的颜色(所有颜色),然后对红色 gucci 衬衫进行后过滤器以仅显示那些作为结果:(这有点不同这个例子,因为我们试图让它尽可能接近后过滤器的清晰应用。)

我们还可以获取所有红色 gucci 衬衫(我们的原始查询),然后对模型(所有红色 gucci 衬衫)和颜色(所有 gucci 衬衫)进行全局聚合。

两者都将返回相同的信息,第二个仅因子聚合引入的额外级别而有所不同。第二个查询看起来有点复杂,但我认为这不是很成问题。真实世界的查询是由代码生成的,无论如何可能更复杂,它应该是一个很好的查询,如果这意味着复杂,那就这样吧。

0 投票
0 回答
143 浏览

elasticsearch - 为什么这个术语查询没有返回任何结果?

我目前正在弹性搜索中实现一个简单的人员搜索。我做了一些研究,发现了很多关于如何实现全文搜索等功能的内容。

问题是,一些查询只是不返回任何结果。

我有以下索引模板:

我的查询如下所示:

如果我现在搜索例如“Maria”,那么我会得到一个结果。但是,如果我正在搜索邮政编码(例如 12345),则不会得到任何结果。

分析 api 具有以下响应:

}

我没有得到任何回应。我已经尝试过术语,匹配查询和所有其他类型的东西,但我无法让它工作?

所需文件: