2016-09-19 99 views
0

我想使用通配符搜索使用弹性搜索2.3使用其官方PHP客户端。弹性搜索2.3通配符查询不返回完全匹配结果

我面临的一个问题是这样的:

案例1.当我搜索词,则返回其是具有樵夫,好莱坞和hollywoodbolly的话。

案例2.但是,当我搜索好莱坞,它不返回有好莱坞在他们的话。

"query" => [ 
      "query_string" => [ 
       "query" => "*$keyword*", 
       "analyze_wildcard" => true, 
       "fields" => $fields 
      ] 
     ], 

但像follwing使用时,第2种情况不工作:

然而,在查询字符串做过这样的时候一切正常

"query" => [ 
      "bool" => [ 
       "must" => [ 
        [ 
         "wildcard" => [ 
          'name' => "*$keyword*", 
         ] 
        ], 
        [ 
         "nested" => [ 
          "path" => "address", 
          "score_mode" => "max", 
          "query" => [ 
           "bool" => [ 
            "must" => [..match[] parameters..] 
           ] 
          ] 
         ] 
        ] 
       ] 
      ] 

我不知道我我做错了。请帮忙。

编辑:

注意:我已经做了现场为not_analysed。

寻找时,但对于纸板

由于搜索时不返回纸板我的查询返回纸板

回答

0

Elasticsearch支持wildcard queriesnot_analyzed领域

所以,如果你想使用通配符功能,你既可以用它query_string对象下,或更改该字段映射到index: not_analyzed,然后你就可以做一个通配符搜索。

+0

我所做的字段作为not_analysed ' '名'=> [ “类型”=> “字符串”, “指数”=> “not_analyzed”, ]' 但还是没能做到它。 –

+0

我的查询在返回**纸板**时搜索**卡**,但不返回**卡纸**搜索**纸板**时。 –

+0

你确定该字段被映射为'not_analyzed'吗?检查'/ _mapping'端点以确保。我只是测试它,我可以使用通配符查询在字段名称为'cardboard'的情况下搜索'* cardboard *'并获得正确的结果。 –