2016-05-24 2 views
0

Я настроил индекс Elasticsearch с двумя полями: «Имя» и «Тип». Когда я выполняю запрос ниже, я не получаю никакого результата, потому что «actor» находится в поле «Тип».Elasticsearch Multi-Field Query

{ 
    "query": { 
    "multi_match": { 
     "query": "johnny depp actor", 
     "operator": "AND", 
     "fields": [ 
     "name", 
     "type" 
     ], 
     "tieBreaker": 0.7 
    } 
    } 
} 

Есть ли способ, чтобы выполнить запрос с количеством слов, и получить результаты, даже если некоторые слова в поле «Name» и другие в поле «Тип».

Спасибо вам за помощь!

ответ

0

я, наконец, нашел решение. Для тех, кто, возможно, нуждается в этом, решение должно использовать cross-field, так что все условия должно быть в хотя бы одно поле для соответствия документа.

{ 
    "query": { 
    "multi_match": { 
     "query": "johnny depp actor", 
     "type": "cross_fields", 
     "operator": "AND", 
     "fields": [ 
     "name", 
     "type" 
     ], 
     "tieBreaker": 0.7 
    } 
    } 
} 
0

Вы можете попробовать:

{ 
    "query": { 
    "bool":{ 
     "should":[ 
     {"match_phrase":{"name":"johnny depp actor"}}, 
     {"match_phrase":{"type":"johnny depp actor"}}, 
     {"match_phrase":{"name":"johnny"}}, 
     {"match_phrase":{"name":"depp"}}, 
     {"match_phrase":{"name":"actor"}}, 
     {"match_phrase":{"type":"johnny depp actor"}}, 
     {"match_phrase":{"type":"johnny"}}, 
     {"match_phrase":{"type":"depp"}}, 
     {"match_phrase":{"type":"actor"}}, 
     ] 
    } 
    } 
} 
+0

Спасибо за ответ, он действительно работает, но если пользователь набирает «jean claude van damme actor», вам придется добавить все комбинации. –

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

  • Нет связанных вопросов^_^