2017-02-17 6 views
0

Рассмотрим следующий запрос:Поиск в определенных полях типов

{ 
    "query" : { 
     "match_phrase" : { 
      "_all" : "Smith" 
     } 
    } 
} 

Как бы указать, в какие поля из которых типа может искать, вместо того, чтобы искать во всем? (Имена полей могут быть не уникальными по типам)

Я попробовал запрос ниже, но это не работает (он не возвращает результатов, он делает, когда я удаляю person. из всех полей):

{ 
    "query": { 
    "multi_match": { 
     "query": "Smith", 
     "fields": [ 
     "person.first_name", 
     "person.last_name", 
     "person.age" 
     ], 
     "lenient": true 
    } 
    } 
} 

Я отправляю эти запросы в http://localhost:9200/tsf-model/_search.

+0

Вы можете также поделиться отображение ? Как и URL-адрес, по которому вы отправляете свой поисковый запрос? – Val

+0

@Val Я не использую явное сопоставление. Я добавил URL-адрес, по которому я отправляю свои запросы. – leroydev

+0

Вы должны объяснить, в каких полях какого типа вы хотите запросить – Val

ответ

1

Если вы можете создать свой запрос динамически, я думаю, вы можете использовать комбинацию Вашего multi_match запроса и type query для каждого типа, для того, чтобы достичь того, чего вы хотите:

{ 
    "query": { 
    "bool": { 
     "minimum_should_match": 1, 
     "should": [ 
     { 
      "bool": { 
      "filter": [ 
       { 
       "type": { 
        "value": "type1" 
       } 
       }, 
       { 
       "multi_match": { 
        "query": "Smith", 
        "fields": [ 
        "field1", 
        "field3", 
        "field5" 
        ] 
       } 
       } 
      ] 
      } 
     }, 
     { 
      "bool": { 
      "filter": [ 
       { 
       "type": { 
        "value": "type2" 
       } 
       }, 
       { 
       "multi_match": { 
        "query": "Smith", 
        "fields": [ 
        "field2", 
        "field4", 
        "field6" 
        ] 
       } 
       } 
      ] 
      } 
     } 
     ] 
    } 
    } 
} 
+0

Спасибо за ответ, работает как ожидалось! Мне любопытно, как это будет работать с большим количеством типов, полевых данных и большого количества данных, но на этот вопрос я думаю позже :) – leroydev

+0

Прохладный, рад, что это помогло! Не стесняйтесь задавать последующие вопросы, как только вы знаете больше. – Val

+0

Я только понял, что «оценка» равна 0 для всех возвращенных результатов, есть ли способ сохранить оценки релевантности для возвращаемых результатов? – leroydev

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