답변:
term쿼리는 그대로 단일 용어와 일치합니다 . 값이 분석되지 않습니다 . 따라서 인덱싱 한 항목에 따라 소문자로 지정할 필요가 없습니다.
Bennett색인 시점에 제공 하고 값이 분석되지 않은 경우 다음 쿼리는 아무것도 반환하지 않습니다.
{
"query": {
"term" : { "user" : "bennett" }
}
}
match_phrase 쿼리 된 필드에 분석기가 정의 된 경우 쿼리는 입력을 분석하고 다음 기준과 일치하는 문서를 찾습니다.
예를 들어 다음 문서를 색인화하는 경우 ( standard필드에 분석기 사용 foo) :
{ "foo":"I just said hello world" }
{ "foo":"Hello world" }
{ "foo":"World Hello" }
이 match_phrase쿼리는 첫 번째 및 두 번째 문서 만 반환합니다.
{
"query": {
"match_phrase": {
"foo": "Hello World"
}
}
}
query_string한 번에 여러 텍스트 필드의 텍스트를 포함 하는 _all 필드 에서 기본적으로 쿼리 검색 . 또한 구문 분석되고 일부 연산자 (AND / OR ...), 와일드 카드 등을 지원합니다 ( 관련 구문 참조 ).
match_phrase쿼리 로서 입력은 쿼리 된 필드에 설정된 분석기에 따라 분석됩니다.
와 달리, match_phrase분석 후 얻은 용어는 사용자가 입력 주위에 따옴표를 사용하지 않는 한 동일한 순서 일 필요가 없습니다.
예를 들어 이전과 동일한 문서를 사용하면이 쿼리는 모든 문서를 반환합니다.
{
"query": {
"query_string": {
"query": "hello World"
}
}
}
그러나이 쿼리는 쿼리와 동일한 2 개의 문서를 반환합니다 match_phrase.
{
"query": {
"query_string": {
"query": "\"Hello World\""
}
}
}
이러한 쿼리에 대한 다양한 옵션에 대해 더 많은 의견이 있습니다. 관련 문서를 참조하세요.
이것이 충분히 명확하고 도움이되기를 바랍니다.
match쿼리는 필드가 분석되면 분석기를 사용하므로 그렇습니다. 기본적으로 하나 이상의 용어 (매개 변수 참조 operator) 가있는 문서를 반환 하며 순서는 중요하지 않습니다.
나는 부분 검색 과 관련하여 그들 사이의 차이점을 확실히 찾고 있다고 생각합니다. 기본 '표준 분석기'를 사용한 분석은 다음과 같습니다 .
데이터가 있다고 가정합니다.
{ "name": "Hello"}
이제 우리가 ell로 부분 검색을하고 싶다면 ????
용어 검색어 또는 일치 검색어
{"term":{"name": "*ell*" }
작동하지 않을 것입니다.
{"term":{"name": "*zz* *ell*" }
작동하지 않을 것입니다.
결론 -용어 또는 일치는 부분 검색을 전혀 할 수 없습니다.
와일드 카드 쿼리 :-
{"wildcard":{"name": "*ell*" }
결과 { "name": "Hello"}를 제공합니다.
{"wildcard":{"name": "*zz* *ell*" }
작동하지 않을 것입니다.
결론 -와일드 카드는 하나의 토큰으로 만 부분 검색을 수행 할 수 있습니다.
Query_string :-
{"query_string": {"default_field": "name","query": "*ell*"}
결과 { "name": "Hello"}를 제공합니다.
{"query_string": {"default_field": "name","query": "*zz* *ell*" }
결과 { "name": "Hello"}를 제공합니다.
결론 -query_string은 두 개의 토큰으로 검색 할 수 있습니다.
-> 여기 토큰은 ell과 zz입니다.
wildcard is able to do partial search with one token only:보다 정확하게 wildcard는 기본적으로 쿼리keyword 는 정의상 단일 토큰 인 필드 에서만 작동합니다 . 필드 내용이 두 단어 이상인 것과는 관련이 없습니다. 와일드 카드 쿼리에서 "ozzy hello"가 일치합니다.