[英]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.