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

elasticsearch示例中的索引?

许嘉福
2023-03-14

我阅读了关于在Elasticsearch中索引文档的教程。例如,批量索引。我有个问题,当为循环中的一个项创建带有两个键的数组时,是否正确:

for($i = 0; $i < 100; $i++) {
    $params['body'][] = array(
        'index' => array(
            '_id' => $i
        )
    );

    $params['body'][] = array(
        'my_field' => 'my_value',
        'second_field' => 'some more values'
    );
}

为什么循环中有两个数组初始化$params['body][]?必须使用与my_字段相同的键进行索引设置?

我的意思是一种情况,当有关index的所有信息都由一个键(index)添加到数组中时:

$params['body'][] = array(
            'index' => array(
                '_id' => $i
            ),

            'my_field' => 'my_value',
            'second_field' => 'some more values'
        );

同样在搜索查询后,我得到错误:

消息:非法字符串偏移量“匹配”在所在行:

$query['match']['name'] = $query;

其中,$query是字符串。

我想这个错误与创建索引的问题,因此我已经开始了。

我在索引中添加文档的代码:

private function addDocument($data = array(), $type)
    {
        if (!empty($data)) {
            foreach ($data as $key => $val) {
                $params['body'][] = array(
                    'index' => array(
                        '_id' => $key,
                        '_type' => 'profiles',
                        '_index' => $this->_typeIndex($type)
                    )
                );

                $params['body'][] = (array)$val;
            }

            $this->client->bulk($params);
        }

    }

是这样吗?因为在搜索中我得到了错误,这在这里描述

共有1个答案

丰景同
2023-03-14

为了使批量索引工作,有效负载必须包含每个文档的一个命令行(索引、类型、文档id)和一个内容行(文档的实际字段),如下所示:

{"index": {"_id": "1234"}}               <--- command for doc1
{"field1": "value1", "field2": "value2"}  <--- source for doc1
{"index": {"_id": "1234"}}               <--- command for doc2
{"field1": "value1", "field2": "value2"}  <--- source for doc2
...

您引用的PHP示例正是这样做的:

$params['body'][] = array(
    'index' => array(
        '_id' => $i
    )
);

将创建第一个命令行,读取{code>{“index”:{u id”:“0”}和

$params['body'][] = array(
    'my_field' => 'my_value',
    'second_field' => 'some more values'
);

将创建第二个内容行,读取{“my\u field”:“my\u value”,“second\u field”:“some more values”}

for循环执行100x操作,并将创建一个有效负载,其中包含100个文档的200行。

如果你把尸体连在一起

$params['body'][] = array(
        'index' => array(
            '_id' => $i
        ),

        'my_field' => 'my_value',
        'second_field' => 'some more values'
    );

它将不起作用,因为这样会在每个文档读取时生成一行,如下所示:

{"index":{"_id": "0"}, "my_field": "my_value", "second_field": "some more values"}

批量操作将失败。。。

再试一次。

更新

它不起作用,因为您添加了太多行。您应该删除foreach,只需这样做。我只是不确定您的id字段是如何调用的。另外,我假设数组包含要添加的文档字段。

private function addDocument($data = array(), $type)
    {
        if (!empty($data)) {
            $params['body'][] = array(
                'index' => array(
                    '_id' => $data['id'],    <--- make sure to use the right id field
                    '_type' => 'profiles',
                    '_index' => $this->_typeIndex($type)
                )
            );
            $params['body'][] = $data;

            $this->client->bulk($params);
        }
    }
 类似资料:
  • 问题内容: 我的目标是为具有1000万个分片的索引重新编制索引,以更改字段映射以促进重要术语分析。 我的问题是我在使用NEST库执行重新索引时遇到了麻烦,并且文档非常有限。如果可能,我需要使用以下示例: http://nest.azurewebsites.net/nest/search/scroll.html http://nest.azurewebsites.net/nest/core/bulk

  • 问题内容: 我已经安装了Elasticsearch以及Neo4j。我想使用“用于ElasticSearch的Neo4j River插件”插件将Elasticsearch与Neo4j集成。谁能告诉我如何整合这两者。我也在寻找一些用例示例,其中我将清楚地了解noe4j如何与elasticsearch一起工作。 问题答案: 我们应该已经安装了Elasticsearch&Neo4j。要与Neo4j Riv

  • 问题内容: Elasticsearch中的索引是什么?一个应用程序有多个索引还是只有一个索引?假设您为某些汽车制造商构建了一个系统。它涉及人员,汽车,零件等。您是否有一个名为制造商的索引,或者您有一个人的索引,一个用于汽车的索引和一个用于零备件的索引?有人可以解释吗? 问题答案: 很好的问题,答案比人们期望的要细腻得多。您可以将索引用于几种不同的目的。 关系指标 最简单,最熟悉的布局将克隆您从关系

  • 问题内容: 我正在考虑使用Elasticsearch建立排名。如果我索引根据分数排序的元素列表。我可以按元素名称查询并获得其在索引上的位置吗? 例如我建立一个包含两个元素的索引: “ Element1”,得分:8“ Element2”,得分:7“ Element3”,得分:10 当我通过“ Element2”查询时,我想获得position = 3 问题答案: Elasticsearch在实际收集

  • 我正在阅读文档,碰巧阅读了多个索引的创建和在多个索引上搜索的能力,以及在Elasticsearch中搜索特定搜索的可能性。 例如,我有两个索引,如释放区和工作区。我可以通过给http://localhost:9200/_search?pretty=true搜索,这将在所有索引中搜索 我可以专门搜索http://localhost:9200/releasedArea,工作区/\u搜索?漂亮=真。 因

  • 我用cmd删除了映射 在我的配置文件中,我定义了如下索引:, 并尝试创建一个新的映射,但我得到了错误 {“error”:{“root_cause”:[{“type”:“index_not_found_exception”,“reason”:“no-this index”,“resource.type”:“index_or_alias”,“resource.id”:“logstash_log*”,“