猿问

如何在具有数组字段的弹性搜索中进行搜索?

我的索引弹性搜索文档包含一个数组字段。例如汽车的功能。


{

"features": [ "Anti-Lock Brakes",

              "Alarm", 

              "Air Bag Driver",

              "Cruise Control", 

              "Satellite Navigation"'

}

如何搜索包含给定数组中的值的文档。例如:我想检查包含“卫星导航”和“巡航控制”等功能的汽车。


我尝试了以下方法,但它不起作用(php代码)


public function index(Request $request, Client $search, SerializerInterface $serializer): JsonResponse

   ...


    $search_query = ["Satellite Navigation", "Cruise Control"]

  

    $filters = [];

    $filters[] = [

                   'terms' => [

                       'features' => $search_query,

                   ]

               ];


    $results = $search->search([

               'index' => 'cars',

               'body' => [

                   'from' => $offset,

                   'size' => self::PAGE_WINDOW,

                   'query' => [

                       "bool" => [

                           "must" => [

                               "match_all" => new \stdClass()

                           ],

                           "filter" => $filters

                       ]

                   ]

               ]

           ]);

...

我想获得有关如何设置 $filters 的提示,以便获得所需的结果。


ITMISS
浏览 77回答 1
1回答

慕丝7291255

由于您没有映射features并且正在添加索引数据,因此会生成默认映射。features尝试下面的搜索查询,这将返回包含以下内容的所有文档'Satellite navigation':'Cruise control'搜索查询:{  "query": {    "bool": {      "must": [        {          "match_phrase": {            "features": "Satellite Navigation"          }        },        {          "match_phrase": {            "features": "Cruise Control"          }        }      ]    }  }}搜索结果:"hits": [      {        "_index": "my-index",        "_type": "_doc",        "_id": "1",        "_score": 1.7178956,        "_source": {          "features": [            "Anti-Lock Brakes",            "Alarm",            "Air Bag Driver",            "Cruise Control",            "Satellite Navigation"          ]
随时随地看视频慕课网APP
我要回答