【问题标题】:Elastic search not working as expected弹性搜索未按预期工作
【发布时间】:2017-05-12 01:32:03
【问题描述】:

我用过这个查询

'body' => [
    'query' => [
        'bool' => [
            'should' => [
                ['match' => ['title'=> $q]],
                ['match' => ['year'=> $q]],
                ['match' => ['case_type'=> $q]],
                ['match' => ['body'=> $q]],
                ['match' => ['petition_no'=> $q]],
                ['match' => ['keywords'=> $q]]
            ]
        ]
    ]
]

我不知道为什么我没有得到正确的结果。在 docker ELASTICSEARCH 日志中,它显示了这一点 [WARN][o.e.d.i.m.StringFieldMapper$TypeParser] [string] 字段已弃用,请在 [title] 上使用 [text] 或 [keyword] 有人可以帮忙吗?

【问题讨论】:

    标签: php elasticsearch docker client kibana


    【解决方案1】:

    如果您正在使用 5.x 以上的 ES 版本,那么 string 数据类型已被弃用,仅供参考:

    5.x 中创建的索引不支持字符串字段,支持 文本和关键字字段。

    来自原始source。您可能必须在映射中创建由 textkeyword 类型而不是 string 组成的字段。

    【讨论】:

    • 那我现在该怎么办?我应该保持这段代码完整并更改我的 json 文件还是什么?
    • 您必须在您拥有的字段上更改string 的数据类型。是的,没错。
    • if (isset($_POST['title'] {$title= $_POST['title']; $indexed =$client->index([ 'index'=>'cases', 'type' =>'cases', 'body'=>[ 'title'=>$title,]] } 我正在添加这样的字段,那么如何将数据类型更改为文本?
    • 我对 php 不是很熟悉,但是在 ES 中创建索引之前,您应该有一个由必要字段的数据类型组成的映射。 This 可能会对您有所帮助。让我知道它是否有帮助?
    • 太复杂了。当您看到我的代码就像这样“body”=>['title'=>$title] 将 $title 的值放在标题中时,他们的示例超出了我的想象。所以如果我想为其设置类型,我将不得不去 'title'=>['type'=>'text'] 但是我要如何以这种方式在 title 中插入值?
    猜你喜欢
    • 2021-07-27
    • 1970-01-01
    • 2021-07-12
    • 2018-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-30
    • 1970-01-01
    相关资源
    最近更新 更多