相关文章推荐
酒量小的薯片  ·  干货 | ...·  2 周前    · 
逃跑的棒棒糖  ·  Html.fromHtml()中Html.T ...·  3 月前    · 
苦恼的啄木鸟  ·  JSON_QUERY ...·  1 年前    · 
胆小的马克杯  ·  centos python2.7.5 ...·  1 年前    · 

作为 Elasticsearch 用户,我们从许多不同的位置收集数据。 我们使用 Logstash、Beats 和其他工具来抓取数据并将它们发送到 Elasticsearch。 有时,我们无法控制数据本身,我们需要管理数据的结构,甚至需要在摄取数据时处理字段名称。

Elasticsearch 有一些保留的字段名称,你不能在文档中使用这些名称。

如果文档具有这些字段之一,则无法为该文档编制索引。 但是,这并不意味着你不能在文档中的任何地方使用这些字段名称。 该限制仅对根节点(root node)有效。 因此,你无法索引以下文档:

PUT twitter/_doc/1
  "_id": 1

你会得到如下错误:

但是你可以成功地写入如下的文档:

PUT twitter/_doc/1
  "user": {
    "_id": 1,
    "name": "liuxg"

究其原因,在上面的 _id 它不是在 root node 下的字段。

因此,正如你在上面看到的 _id 字段,你不能在文档中使用以下字段名称作为 root 字段名称:

_field_names _index _seq_no _nested_path _ignored _routing _data_stream_timestamp _tier _version _feature _source _primary_term * _type *

注意:上面用 * 标注的字段对于老版本的 elasticsearch 这个字段也是保留关键字

这意味着如果你有将这些字段名称作为根字段的文档。 你会得到一个错误。 例如,你想使用 Logstash 移动该数据。 你有一个包含如下内容的文件:

"ImdbId": "tt0030629", "_id": "tt0030629", "name": "Prison Without Bars", "year": "1938", "certificate": "Approved", "runtime": "72 min", "genre": ["Crime", " Drama", " Romance"], "ratingValue": "6.2", "summary_text": "Suzanne, Renee, Nina and Marta all hate being in prison, being slapped and treated badly, and so all the girls are trying to escape. Madame Appel just causes chaos all the time, with her ... See full summary\u00a0\u00bb", "ratingCount": "66" "ImdbId": "tt0030528", "_id": "tt0030528", "name": "Orage", "year": "1938", "certificate": "", "runtime": "98 min", "genre": ["Drama"], "ratingValue": "5.7", "summary_text": "Orage is a 1938 French drama film directed by Marc All\u00e9gret. The screenplay was written by Marcel Achard and H.G. Lustig, based on play \"Le venin\" by Henri Bernstein. The films stars ... See full summary\u00a0\u00bb", "ratingCount": "66"

因此,当你尝试使用 Logstash 摄取它时,你将收到以下错误。 即使你在单独索引这些文档时也会遇到上述错误。比如我们使用如下的一个例子:

sample.log

{"_id":1,"timestamp":"2019-09-12T13:43:42Z","paymentType":"Amex","name":"Merrill Duffield","gender":"Female","ip_address":"132.150.218.21","purpose":"Toys","country":"United Arab Emirates","age":33}
{"_id":2,"timestamp":"2019-08-11T17:55:56Z","paymentType":"Visa","name":"Darby Dacks","gender":"Female","ip_address":"77.72.239.47","purpose":"Shoes","country":"Poland","age":55}
{"_id":3,"timestamp":"2019-07-14T04:48:25Z","paymentType":"Visa","name":"Harri Cayette","gender":"Female","ip_address":"227.6.210.146","purpose":"Sports","country":"Canada","age":27}
{"_id":4,"timestamp":"2020-02-29T12:41:59Z","paymentType":"Mastercard","name":"Regan Stockman","gender":"Male","ip_address":"139.224.15.154","purpose":"Home","country":"Indonesia","age":34}
{"_id":5,"timestamp":"2019-08-03T19:37:51Z","paymentType":"Mastercard","name":"Wilhelmina Polle","gender":"Female","ip_address":"252.254.68.68","purpose":"Health","country":"Ukraine","age":51}

logstash_input.conf

input {
  file {
    path => "//Users/liuxg/elastic/logstash-8.6.2/sample.log"
    type    => "applog"
    codec   => "json"
    start_position => "beginning"
    sincedb_path => "/dev/null"
output {
   stdout {
      codec => rubydebug
  elasticsearch {
    hosts => ["localhost:9200"]
    index => "json-%{+YYYY.MM.dd}"

我们使用如下的命令来启动对数据的采集:

$ pwd
/Users/liuxg/elastic/logstash-8.6.2
$ ls sample.log logstash_input.conf 
logstash_input.conf sample.log
./bin/logstash -f logstash_input.conf 

如你所见,错误与我们上面得到的错误相同。 那么,我们需要做什么? 有一些解决方案可以处理这些类型的数据操作。 你可以在源上修复文档,也可以使用 mutate 过滤器在 Logstash 中管理它们:

logstash_input.conf

input {
  file {
    path => "//Users/liuxg/elastic/logstash-8.6.2/sample.log"
    type    => "applog"
    codec   => "json"
    start_position => "beginning"
    sincedb_path => "/dev/null"
filter {
  mutate {
    rename => {"_id" => "id"}
output {
   stdout {
      codec => rubydebug
  elasticsearch {
    hosts => ["localhost:9200"]
    index => "json-%{+YYYY.MM.dd}"

我们再次运行 Logstash:

./bin/logstash -f logstash_input.conf 

我们可以看到这次数据被成功地写入,并且我们可以在 Kibana 中进行查看:

当您重新运行 logstash 时,您将看到文档将被正确索引。 另一方面,我试图解决摄取管道的问题。 一开始我认为这对我来说可能是一个更好的解决方案。 但有趣的是,我对摄取管道尝试了很多不同的方法,但我找不到解决方案。 这是我尝试使用摄取管道的方法:

POST _ingest/pipeline/_simulate
  "pipeline": {
    "processors": [
        "rename": {
          "field": "_id",
          "target_field": "id"
  "docs": [
      "_index": "myindex",
      "_id": 1,
      "_source": {
        "_id": "2"

我收到以下错误:

"error": { "root_cause": [ "type": "illegal_argument_exception", "reason": "unexpected metadata [_id:1] in source" "type": "illegal_argument_exception", "reason": "unexpected metadata [_id:1] in source" "status": 400 在尝试了我们能想到的所有其他选项后,我们更改了许可证,知道这将导致 Elasticsearch 的分支以不同的名称和轨迹发展。] 我们选择 AGPL,而不是其他许可证,因为我们希望通过与 OSI 的合作,帮助在开源许可世界中拥有更多选择。嘿,也许随着事态的发展,AGPL 已经足够适合像我们这样的基础设施软件了(例如,Grafana 从 Apache2 迁移到 AGPL)。但是通过使用 AGPL,这个被 OSI 批准的许可证,我们可以再次使用 “开源” 这个词,这消除了人们可能存在的任何疑问或误解。 Elasticsearch 无疑是是目前世界上最为流行的大数据搜索引擎。根据 DB - Engines 的统计,Elasticsearch 雄踞排行榜第一名,并且市场还在不断地扩大:能够成为一名 Elastic 认证工程师也是很多开发者的梦想。这个代表了 Elastic 的最高认证,在业界也得到了很高的认知度。得到认证的工程师,必须除了具有丰富的 Elastic Stack 知识,而且必须有丰富的操作及有效的解决问题的能力。拥有这个认证证书,也代表了个人及公司的荣誉。针对个人的好处是,你可以.. 你们好,我是Elastic的刘晓国。如果大家想开始学习Elastic的话,那么这里将是你理想的学习园地。在我的博客几乎涵盖了你想学习的许多方面。在这里,我来讲述一下作为一个菜鸟该如何阅读我的这些博客文章。我们可以按照如下的步骤来学习:1)Elasticsearch简介:对Elasticsearch做了一个简单的介绍2)Elasticsearch中的一些重要概念:cluster, n.......................................................... 在这篇文章中,我将会把我写的有些内容录制成视频,供大家参考。希望对大家有所帮助。优酷的视频频道地址在这里。Elastic 简介及Elastic Stack 安装:优酷,腾讯 Elastic Stack docker 部署:优酷,腾讯 Elasticsearch中的一些重要概念(Cluster/Shards/Replica/Document/Type/Index):优酷,腾讯 开始使用El............... Elasticsearch是一个非常强大的搜索引擎。它目前被广泛地使用于各个IT公司。Elasticsearch是由Elastic公司创建并开源维护的。它的开源代码位于https://github.com/elastic/elasticsearch。同时,Elastic公司也拥有Logstash及Kibana开源项目。这个三个开源项目组合在一起,就形成了 ELK软件栈。他们三个共同形成了一个强大的... 自 Elasticsearch 8.15 或 Elasticsearch Serverless 以来,。这篇博文将向你展示如何在 Python 中利用它。在中,我演示了如何使用 CSV 作为中间表示将 ES|QL 查询转换为 Pandas 数据帧。不幸的是,CSV 需要显式类型声明,速度很慢(尤其是对于较大的数据集),并且不处理嵌套数组和对象。Apache Arrow 消除了所有这些限制。 作者:来自 ElasticElastic 8.15 已经发布,语义搜索比以往任何时候都更容易实现。就这样!让我们完成它。我们将介绍如何在 15 分钟内完成所有这些任务:将你的文档存储在某些数据存储服务中,例如 AWS S3 Bucket设置 Elastic Search 数据连接器使用 eland 库上传嵌入模型,在 Elastic 中设置推理 API将其连接到使用 semantic_text 数据类型的索引将你的 inference API 添加到该索引同步数据连接器立即使用 Elasti 我们如何衡量人工智能对政府的影响?毫无疑问,人工智能将为运营流程和决策带来的好处已被广泛讨论 —— 从自动化工作流程到节省成本再到减少重复工作。但对于以服务公众为目标的组织来说,人工智能的这些好处不仅限于业务指标,例如效率或收入增长。相反,人工智能带来的潜在效率和成本节约可以开辟空间和资源,用于提供有意义的公共服务,改善全球人民的生活质量。这听起来可能过于简单和理想化 —— 但它已经发生了。 ​在本教程中,我们将了解如何使用 LangGraph、LLaMA3 和 Elasticsearch Vector Store 从头开始​​创建可靠的代理。我们将结合 3 篇高级 RAG 论文中的想法:用于路由的自适应 RAG:根据内容将问题引导到向量存储或网络搜索纠正性 RAG 回退机制:使用该机制,当问题与向量存储不相关时,我们将引入回退检索,改为使用网络搜索。。用于自我校正的自我 RAG:此外,我们还将添加自我校正功能,以检查生成的内容是否存在幻觉或不相关的情况,如果不合适,我们将再次回退到网 本教程中的说明向您展示了如何将 inference API 工作流与各种服务结合使用来对你的数据执行语义搜索。为了说明问题的方便,我将使用 Cohere 服务来进行详细说明。更多其它服务,请详细参阅。:有关在 Elastic Stack 中执行语义搜索的最简单方法,请参阅。在本次练习中,我们将使用的 embed-english-v3.0 模型。事实上,你可以使用任何 Cohere 和 OpenAI 模型,它们均受 inference API 支持。 ​本系列博文揭示了我们的现场工程团队如何使用 Elastic Stack 和生成式 AI 开发出一款可爱又高效的客户支持聊天机器人。如果你提示的这一部分输出尽可能简洁的摘要,同时仍保持准确性。我们通过要求 LLM 多次检查其生成的文本并根据源文档检查准确性来实现这一点。指示了特定的指导方针,以便每个文档的输出都一致。用一篇文章亲自尝试这个提示,看看它可以生成什么样的结果。然后更改一个或多个指导方针并在新的聊天中运行提示,以观察输出的差异。`,我们创建第二个摘要,使我们能够搜索代表文章的整个文本的特定段落。 此表总结了两个 RAG 管道的五项测试结果。我根据答案的细节和质量判断了每种方法的相对优越性,但这完全是主观判断。实际答案在此表下方重现,供你参考。话虽如此,让我们来看看他们做得怎么样!SimpleRAG 无法回答问题 1 和 5。AdvancedRAG 还对问题 2、3 和 4 进行了更详细的说明。基于增加的细节,我更好地判断了 AdvancedRAG 答案的质量。14.1s。 RAG 旨在通过从外部知识库检索信息来丰富生成的答案,从而增强 LLMs。通过提供特定领域的信息,LLM 可以快速适应其训练数据范围之外的用例;比微调便宜得多,而且更容易保持最新状态。提高知识库的质量和清晰度。提高搜索查询的覆盖率和特异性。这两项措施将实现提高 LLM 获得相关事实和信息的可能性的目标,从而不太可能产生幻觉或利用自己的知识 —— 这些知识可能已经过时或不相关。方法的多样性很难用几句话来阐明。让我们直接进入实施阶段,让事情更清楚。图 1:作者使用的 RAG 管道。 如今,用户已经开始期待根据个人兴趣定制搜索结果。如果我们听的所有歌曲都是摇滚歌曲,那么在搜索 “Crazy” 时,我们会期望 Aerosmith 的歌曲排在搜索结果的首位,而不是 Gnarls Barkley 的歌曲。在本文中,我们将介绍个性化搜索的方法,然后以音乐偏好为例,深入探讨如何使用学习排名 (learning-to-rank: LTR) 来实现个性化搜索的具体方法。 我们很高兴地宣布 Elasticsearch Open的最新功能:集成 Anthropic 的 Claude。这项功能使 Elastic 用户能够直接连接到 Anthropic 平台,并使用 Claude 3.5 Sonnet 等大型语言模型来构建 GenAI 应用程序,并实现问答等用例。以前,客户可以从 Amazon Bedrock 等提供商处访问此功能,但现在可以使用他们的 Anthropic 帐户来实现这些目的。 回顾 Elasticsearch 最新 8.15.0 版本中围绕速度、规模和相关性的所有变化,我们取得的进步令人惊叹。这篇文章汇总并记录了 Elasticsearch 和 Lucene 中所有出色的工作,使其成为最佳向量数据库。如果你想了解更多有关其内部工作原理的信息,我们将深入探讨和其他的重大进展。 截止 8.15 版本,此功能处于测试阶段,可能会发生变化。设计和代码不如官方 GA 功能成熟,并且按原样提供,不提供任何保证。测试版功能不受官方 GA 功能的支持 SLA 约束。本教程向你展示如何使用 semantic text 功能对数据执行语义搜索。语义文本通过在提取时提供推理并自动提供合理的默认值来简化推理工作流程。你无需定义与模型相关的设置和参数,也无需创建推理提取管道。在 Elastic Stack 中使用的推荐方法是遵循 semantic_text 工作流程。 Elastic Learned Sparse EncodeR(或 ELSER)是由 Elastic 训练的 NLP 模型,可让你使用稀疏向量表示执行语义搜索。语义搜索不是根据搜索词进行文字匹配,而是根据搜索查询的意图和上下文含义检索结果。本教程中的说明向你展示了如何使用 ELSER 对数据执行语义搜索。:有关在 Elastic Stack 中执行语义搜索的最简单方法,请参阅端到端教程。:使用 ELSER 进行语义搜索时,每个字段仅考虑前 512 个提取的标记。请参阅了解更多信息。 自一年多前第一次发布此博客以来,发生了很多变化,我们在本博客中涵盖了很多内容。你从云 API 密钥开始,创建了 Elasticsearch Serverless 项目,生成了云 API 密钥,配置了 Open Web Crawler,爬取了三个 Elastic Lab 站点,对长文本进行了分块,生成了嵌入,测试了 RAG 应用程序的最佳聊天设置,并导出了代码!UI 在哪里,Vestal?请关注第二部分,我们将在其中将操场代码集成到具有 React 前端的 Python 后端中。