답변:
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"가 일치합니다.