当前位置: 首页 > 知识库问答 >
问题:

使用ElasticSearch映射文档的问题

缑兴贤
2023-03-14

我有一个文档,我希望将其存储在ElasticSearch中,并能够对其运行查询,但我认为文档结构可能格式不正确,因此我无法进行有效的查询。

该文档试图是通用的,因此具有一组重复结构。

例如:

  description : [
    { type : "port", value : 1234 }.
    { type : "ipaddress", value : "192.168.0.1" },
    { type : "path", value : "/app/index.jsp app/hello.jsp" },
    { type : "upsince", value : "2014-01-01 12:00:00" },
    { type : "location", value : "-40, 70" }
  ]

注意:我简化了这个例子,就像在真实的文档中一样,重复结构有大约7个字段,其中3个字段将明确标识“类型”。

从上面的示例中,我看不到如何编写映射,因为“值”可以是:

  • 整数
  • IP地址
  • 只需要用空格标记的字段
  • 约会时间
  • 一个GEO点

我能看到的唯一解决方案是,需要将文档转换为另一种格式,以便更容易与ElasticSearch进行映射?

共有2个答案

丌官承
2023-03-14

如果你先像这样转换他们的文档,你会为自己省去很多麻烦

{
  "port": 1234,
  "ipaddress" : "192.168.0.1" ,
  "path" : "/app/index.jsp app/hello.jsp",
  "upsince" : "2014-01-01 12:00:00",
  "location" : "-40, 70" 
}

Elasticsearch被设计为在字段和值方面具有灵活性,因此它已经可以处理您抛给它的几乎任何键/值组合。

或者,您可以将原始文档包含在显式存储但未索引的字段中,以防您需要在查询中返回原始文档。

公冶光亮
2023-03-14

这个案例在这里有所描述:http://www.found.no/foundation/beginner-troubleshooting/#keyvalue-woes

同一字段中不能有不同类型的值。您可以使用不同的字段,如“location\u value”、“timestamp\u value”等。

这里有一个可运行的例子:https://www.found.no/play/gist/ad90fb9e5210d4aba0ee

#!/bin/bash

export ELASTICSEARCH_ENDPOINT="http://localhost:9200"

# Create indexes

curl -XPUT "$ELASTICSEARCH_ENDPOINT/play" -d '{
    "mappings": {
        "type": {
            "properties": {
                "description": {
                    "type": "nested",
                    "properties": {
                        "integer_value": {
                            "type": "integer"
                        },
                        "type": {
                            "type": "string",
                            "index": "not_analyzed"
                        },
                        "timestamp_value": {
                            "type": "date"
                        }
                    }
                }
            }
        }
    }
}'

# Index documents
curl -XPOST "$ELASTICSEARCH_ENDPOINT/_bulk?refresh=true" -d '
{"index":{"_index":"play","_type":"type"}}
{"description":[{"type":"port","integer_value":1234},{"type":"upsince","timestamp_value":"2014-01-01T12:00:00"}]}
'
 类似资料:
  • 问题内容: 在使用nutch和elasticsearch进行爬网时面临一些严重的问题。 我们的应用程序中有两个数据存储引擎。 的MySQL elasticsearch 可以说我在mysql db的urls表中存储了10个url。现在,我想在运行时从表中获取这些url,并将其写入seed.txt以进行爬网。我已经将所有这些网址一次性写入了txt。现在,我开始抓取,然后将这些文档在elasticsea

  • 我正在尝试索引stackoverflow数据。首先,我使用指定的映射和设置创建一个索引。 然后我尝试批量索引我的文档: 给定错误:('500个文档未能索引.', [{'索引':{'_index':'sof-问题-答案2','_type':'Stackoverflow','_id':1','status':400,'错误':{'type':'illegal_argument_exception','

  • 随着ElasticSearch计划删除映射类型,这是否也意味着不再使用嵌套文档和嵌套查询?ElasticSearch将如何支持无类型上下文中的嵌套对象查询? 我正在考虑的功能是能够只返回匹配搜索条件的嵌套数组中的命中。 编辑1:ElasticSearch版本6中的映射查询示例 ElasticSearch 6映射 ElasticSearch 6查询

  • 我目前正在使用Laravel v7。2.安装babenkoivan/scout elasticsearch驱动程序(4.2)并使用AWS elasticsearch 7.1调幅。在我的应用程序中映射了几个表,这些表工作正常,但嵌套映射存在问题,以前该映射工作正常,现在已损坏。 我将数据保存到一个表中,并将该表数据复制到AWS Elasticsearch中。我使用MySQL 5.6,所以我使用TEX

  • 问题内容: 我有一个要在elasticSearch上建立索引的文档,该文档包含一些我事先不知道的动态键,例如下面的示例中的“ spanish”或“ french” 我使用的是DSL elastic4s为了使我的映射(通过在DSL的createIndex),但我找不到如何创建,使用这个库的基础上,“匹配”选项动态映射(如建议在这里),在为了为路径content.title下存储的每种语言指定不同的分

  • 我想将字段类型从“string”更改为“date”(具体格式为“epoch\u second”)。由于无法更新现有索引的映射,因此我需要创建一个新索引,我最想使用现有索引的映射。以下是我正在使用的内容: Curl-XGET'http://localhost:9200/sam/saga/_mapping?pretty' 要将当前索引的映射转储到json文件中,其内容如下: 然后我替换 具有 并将新文