0

我一直在使用 Elasticsearch 7.6 和 PHP 客户端 API 进行所有操作。我创建了弹性搜索索引设置和映射如下

$params = [
    'index' => 'elasticindex',
    'body' => [
        'settings' => [
            "number_of_shards" => 1,
            "number_of_replicas" => 0,
            "index.queries.cache.enabled" => false,
            "index.soft_deletes.enabled" => false,
            "index.requests.cache.enable" => false,
            "index.refresh_interval" => -1
        ],
        'mappings' => [
            '_source' => [
                "enabled" => false
             ],
            'properties' => [
                "text" => [
                        "type" => "text",
                        "index_options" => "docs"
                ]
            ]
     ]
    ]
];

我能够使用以下代码索引文档

$params = array();
$params['index'] = 'elasticindex';
for($i = 1; $i <=2; $i++) {
        $params['id'] = $i;
        $params['body']['text'] = 'apple';
        $responses = $client->index($params);
}

但是当我使用以下搜索查询时

  $params = [
        'index' => 'elasticindex',
        'body'  => [
            'query' => [
                'match' => [
                    "text" => "apple"
                ]
            ]
        ]
    ];

$results = $client->search($params);

我得到如下空结果

Array                                                                                                                                                   
   (                                                                                                                                                       
    [took] => 3                                                                                                                                         
    [timed_out] =>                                                                                                                                      
    [_shards] => Array                                                                                                                                  
        (                                                                                                                                               
            [total] => 1                                                                                                                                
            [successful] => 1                                                                                                                           
            [skipped] => 0                                                                                                                              
            [failed] => 0                                                                                                                               
        )                                                                                                                                               

    [hits] => Array         
        (          
            [total] => Array                                       
                (                                                    
                    [value] => 0
                    [relation] => eq
                )           

            [max_score] =>   
            [hits] => Array
                (          
                )     

        )               

) 

在不创建静态索引模板的情况下,如果我尝试建立索引,elasticsearch 动态映射效果很好,并且我得到了结果。

目标是我希望弹性搜索仅在其倒排索引中索引文档 ID,而不是位置或偏移量,并且我只想检索匹配的文档 ID 作为结果。非常感谢您的帮助。提前致谢!

4

2 回答 2

1

由于文档是由get处理程序而不是查询处理程序返回的,因此索引文档后没有正确刷新索引。

正如您自己指出的那样,在您的配置中,您设置了:

"index.refresh_interval" => -1

.. 这意味着索引不会自动刷新。很少需要更改刷新间隔,除非在吞吐量非常高的情况下或需要特定行为的情况下。

于 2020-05-11T09:03:34.200 回答
0

尝试索引文档这样的东西。

$client = Elasticsearch\ClientBuilder::create()
                    ->setHosts($hosts)
                    ->build();

$params = [
    'index' => 'elasticindex',
    'type' => 'documents',
    'id' => '1',
    'body' => ['text' => 'apple']
];

$response = $client->index($params);
print_r($response);

注意:_id 可以根据需要动态定义,否则 id 将由 elastic 自动设置。

并尝试通过搜索查询获取文档。

{
    "query": {
        "bool": {
            "must": {
                "term": {
                    "text": "apple"
                }
            }
        }
    }
}

如果要对该键进行全文搜索,请将此键属性设置为

"properties": {
   "name": {
     "type": "text"
   }
}
于 2020-05-10T09:46:58.927 回答