2016-11-25 3 views
0

Я попытался найти ответ на этот вопрос повсюду, но мне не удалось его найти. У меня есть простой индекс для пользователей, в которых я использую следующий запрос для извлечения некоторых результатов:Вложенный запрос | Упругий поиск

1. curl -XGET 'localhost:9200/users/_search?pretty' -d' 
{ 
"explain": true, 
"query": { 
"match": { 
    "skills": { 
    "query": "im looking for some business counseling", 
    "operator": "or", 
    "fuzziness": "auto", 
    "analyzer": "search_analyzer" 
    } 
    } 
}, 
"sort": [ 
{"_score": "desc"} 
], 
}' 

Этого запрос успешно дает мне желаемые результаты ... Теперь часть, где я был потерян на том, как использовать следующий запрос (# 2), чтобы запросить документы, только что извлеченные из запроса выше (# 1). (Кстати, я пытался использовать все типы соединений запросов найдено в документации от elastic.co, но проблема в том, что они только запросить один набор документов на основе различных критериев, или я ошибаюсь?):

2. "query": { 
"match": { 
    "search": { 
    "query": "now I want to query the documents just fetched with this text", 
    "operator": "or", 
    "fuzziness": "auto", 
    "analyzer": "search_analyzer" 
    } 
} 
} 
+0

И почему вы хотите, чтобы эти вещи работали в определенном порядке? –

+0

Причина, по которой я хочу сделать это в этом порядке, состоит в том, что я хочу выполнить перекрестное сопоставление –

ответ

0

таким образом, после копаться в документации снова я в конечном итоге найти ответ с запросом соединения BOOL ... это выглядит следующим образом:

curl -XGET 'localhost:9200/users/_search?pretty' -d' 
{ 
"explain": true, 
    "query": { 
    "bool": { 
    "should": [ 
    { "match": { "skills": "Im looking for somebody with business skills"}}, 
    { "bool": { 
     "should": [ 
     { "match": { "search": "someone is looking for my skills which are cooking,caking, and entertaining" }} 
     ] 
     }} 
    ] 
    } 
}, 
"sort": [ 
{"_score": "desc"} 
] 
}' 

с отображением индекса, глядя, как так:

{ 
"settings": { 
    "analysis": { 
     "analyzer": { 
      "search_analyzer": { 
      "type": "custom", 
       "tokenizer": "punctuation", 
       "filter": ["lowercase","apostrophe","asciifolding","stop_analyzer","kstem"] 
      } 
     }, 
     "tokenizer": { 
      "punctuation": { 
       "type": "pattern", 
       "pattern": "[ .,!?+&@=-]" 
      } 
     }, 
     "filter": { 
      "stop_analyzer": { 
       "type": "stop" 
      } 
     } 
    } 
}, 
"mappings": { 
     "users": { 
      "properties": { 
       "skills": { 
        "type": "string", 
        "norms": { "enabled": false }, 
        "analyzer": "search_analyzer" 
       }, 
       "search": { 
        "type": "string", 
        "norms": { "enabled": false }, 
        "analyzer": "search_analyzer" 
       } 
      } 
     } 
    } 
}