簡體   English   中英

如何在具有數組字段的彈性搜索中進行搜索?

[英]How to search in elastic search having an array field?

我的索引彈性搜索文檔包含一個數組字段。 例如汽車的特征。

{
"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 的提示,以便獲得所需的結果。

由於您沒有features映射並且您正在添加索引數據,因此會生成默認映射。

試試下面的搜索查詢,這將返回所有包含'Satellite navigation''Cruise control'features的文檔

搜索查詢:

{
  "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"
          ]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM