2016-11-17 3 views
1

Я ищу для получения единого запроса для поиска и фильтрации. Но, как и ожидалось, когда я применял фильтрацию, условие фильтра применялось ко всем типам, поэтому я получил только результат того документа, у которого есть отфильтрованное свойство и значение.ElasticSearch NEST - Поиск по нескольким типам, но применять фильтр по выбранному типу

Например,

Здесь я искал в 3-х типов (продукт, категория, Manufacturer)

GET /my-index/Product,Category,Manufacturer/_search 
{ 
    "query": { 
     "filtered": { 
      "query": {...}, //--> Search a word which present in all types 
      "filter": { 
       "term": { 
        "ProductField": "VALUE" 
       } 
      } 
     } 
    } 
} 

Здесь я получил только результат продукта типа, потому что тип продукта содержит только поле, как 'ProductField' и имеет значение как 'VALUE'.

Что я ожидал это, с помощью одного запроса, принеси все типы результатов (товаров, Категория, изготовитель), что, удовлетворяющих поисковому запросу и применять фильтрацию только на продукт.

Так мои сомнения

Есть ли способ в упругом поиске применять фильтрацию определенного типа результатов поиска в одиночку, чем применение для всех типов?

ответ

2

Да, вы можете использовать запрос type для достижения именно этого. В фильтре есть пункт bool/should, который выбирает либо Category или Manufacturer без каких-либо других условий, или Product документов, имеющими ProductField: VALUE:

POST /my-index/Product,Category,Manufacturer/_search 
{ 
    "query": { 
    "filtered": { 
     "query": {}, 
     "filter": { 
     "bool": { 
      "minimum_should_match": 1, 
      "should": [ 
      { 
       "type": { 
       "value": "Category" 
       } 
      }, 
      { 
       "type": { 
       "value": "Manufacturer" 
       } 
      }, 
      { 
       "bool": { 
       "must": [ 
        { 
        "type": { 
         "value": "Product" 
        } 
        }, 
        { 
        "term": { 
         "ProductField": "VALUE" 
        } 
        } 
       ] 
       } 
      } 
      ] 
     } 
     } 
    } 
    } 
} 
+0

Спасибо, One сомнения, является обязательным говоря уже о других, чем продукт в фильтре типов запрос? Как и вы добавили категорию и производителя в блок должен, потому что я добавил все в запрос Uri | POST/my-index/Product, Category, Manufacturer/_search – LMK

+0

Попробуйте, но не исключайте условие 'minimum_should_match', иначе оно не будет работать. – Val

+0

Sure .......... (y) – LMK

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