2012-06-04 5 views
0

Это мой вопрос, связанный с мой предыдущий вопрос, что я спросил search stops after the first matchНе получать все результаты

Здесь я даю вам отображение.

{ 
    "copy_order_snapshot": { 
     "properties": { 
      "line_item_info": { 
       "dynamic": "true", 
       "properties": { 
        "m_product_details": { 
         "dynamic": "true", 
         "properties": { 
          "accessories_colour": { 
           "type": "string" 
          }, 
          "status": { 
           "type": "string" 
          } 
         } 
        }, 
        "other_details": { 
         "dynamic": "true", 
         "properties": { 
          "accessories_material_type": { 
           "type": "string" 
          } 
          "status": { 
           "type": "string" 
          } 
         } 
        }, 
        "product_details": { 
         "dynamic": "true", 
         "properties": { 
          "accessories_colour": { 
           "type": "string" 
          }, 
          "status": { 
           "type": "string" 
          } 
         } 
        } 
       } 
      }, 
      "order_data": { 
       "dynamic": "true", 
       "properties": { 
        "state": { 
         "type": "string" 
        }, 
        "status": { 
         "type": "string" 
        }      
       } 
      } 
     } 
    } 
} 

В моем предыдущем вопросе я говорил о attribute_set_id, здесь же случай с status. order_details->status is "enabled", а другой статус "1" and "canceled". Когда я искать

{ 
    "query":{ 
     "term":{ 
      "status":"enabled" 
     } 
    } 
} 

я получить результат

но если искать

{ 
    "query":{ 
     "term":{ 
      "status":"1" 
     } 
    } 
} 

или

{ 
    "query":{ 
     "term":{ 
      "status":"canceled" 
     } 
    } 
} 

я не получаю никаких результатов.

Пожалуйста, помогите.

+0

Vipul, основываясь на информации, которую вы предоставили, можно придумать следующий сценарий в попытке продемонстрировать вопрос: https://gist.github.com/2868005 К сожалению, этот скрипт работает отлично. Таким образом, в вашем описании проблемы должно быть что-то еще. Не могли бы вы изменить этот скрипт, чтобы продемонстрировать свою проблему? – imotov

+0

Точка - это статус: «1» или «статус:» включен «или« статус: отменен »не имеют трех разных идентификаторов, но все они встречаются в одном и том же идентификаторе. Для одного id у меня есть все эти три слова под 'order_details',' order_data' и 'product_details'. – Vipul

+0

Vipul, я обновил https://gist.github.com/2868005, чтобы содержать пример воспроизведения вашего вопроса. – imotov

ответ

1

Это происходит из-за неоднозначного названия поля «status». Во время обработки запросов elasticsearch разрешает имя поля «статус» в первое полное имя поля, которое оно соответствует. Когда я запустил его на своей машине, он был разрешен в файл line_item_info.other_details.status.

$ curl "localhost:9200/test-orders/_validate/query?q=status:blah&explain=true&pretty=true" 
{ 
    "valid" : true, 
    "_shards" : { 
    "total" : 1, 
    "successful" : 1, 
    "failed" : 0 
    }, 
    "explanations" : [ { 
    "index" : "test-orders", 
    "valid" : true, 
    "explanation" : "line_item_info.other_details.status:blah" 
    } ] 
} 

Если вы хотите, чтобы ваш запрос, чтобы соответствовать всем полям состояния, то, возможно, необходимо использовать полные имена (например, line_item_info.other_details.status, line_item_info.m_product_details.status и т.д.) и объединить их с помощью Dis Max или Bool Queries.

Например:

$ curl -XGET http://localhost:9200/test-orders/copy_order_snapshot/_search -d '{ 
    "query":{ 
     "bool" : { 
      "should" : [ 
       { 
        "term" : { "line_item_info.m_product_details.status" : "1" } 
       }, 
       { 
        "term" : { "line_item_info.other_details.status" : "enabled" } 
       } 
      ] 
     } 
    } 
}' 
+0

Не могли бы вы дать мне запрос bool (curl) ... – Vipul

Смежные вопросы