Search-as-you-type 필드 타입
Search-as-you-type 필드 타입
search-as-you-type 필드 타입은 접두사(prefix)와 삽입형(infix) 완성 둘 다를 사용해 search-as-you-type 기능을 제공해요.
출처: 문서
본문
예시
search-as-you-type 필드를 매핑하면 이 필드의 n-gram 하위 필드(n은 [2, max_shingle_size] 범위)가 만들어져요. 또한 index prefix 하위 필드도 만들어져요.
search-as-you-type 필드가 있는 매핑을 만들어 볼게요.
PUT books
{
"mappings": {
"properties": {
"suggestions": {
"type": "search_as_you_type"
}
}
}
}
suggestions 필드 외에도 이 설정은 suggestions._2gram, suggestions._3gram, suggestions._index_prefix 필드를 만들어요.
search-as-you-type 필드가 있는 문서를 색인해요.
PUT books/_doc/1
{
"suggestions": "one two three four"
}
용어를 어떤 순서로든 매칭하려면 bool_prefix 또는 multi_match 쿼리를 사용해요. 이 쿼리들은 검색 용어가 지정된 순서대로 있는 문서를 순서가 뒤바뀐 문서보다 더 높이 랭킹해요.
GET books/_search
{
"query": {
"multi_match": {
"query": "tw one",
"type": "bool_prefix",
"fields": [
"suggestions",
"suggestions._2gram",
"suggestions._3gram"
]
}
}
}
응답에는 매칭된 문서가 포함돼요.
{
"took" : 13,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 1,
"relation" : "eq"
},
"max_score" : 1.0,
"hits" : [
{
"_index" : "books",
"_type" : "_doc",
"_id" : "1",
"_score" : 1.0,
"_source" : {
"suggestions" : "one two three four"
}
}
]
}
}
용어를 순서대로 매칭하려면 match_phrase_prefix 쿼리를 사용해요.
GET books/_search
{
"query": {
"match_phrase_prefix": {
"suggestions": "two th"
}
}
}
응답에는 매칭된 문서가 포함돼요.
{
"took" : 23,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 1,
"relation" : "eq"
},
"max_score" : 0.4793051,
"hits" : [
{
"_index" : "books",
"_type" : "_doc",
"_id" : "1",
"_score" : 0.4793051,
"_source" : {
"suggestions" : "one two three four"
}
}
]
}
}
마지막 용어들을 정확히 매칭하려면 match_phrase 쿼리를 사용해요.
GET books/_search
{
"query": {
"match_phrase": {
"suggestions": "four"
}
}
}
응답:
{
"took" : 2,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 1,
"relation" : "eq"
},
"max_score" : 0.2876821,
"hits" : [
{
"_index" : "books",
"_type" : "_doc",
"_id" : "1",
"_score" : 0.2876821,
"_source" : {
"suggestions" : "one two three four"
}
}
]
}
}
파라미터 (Parameters)
search-as-you-type 필드 타입이 받는 파라미터는 다음 표와 같아요. 모든 파라미터는 선택 사항이에요.
| 파라미터 | 설명 |
|---|---|
analyzer |
이 필드에 사용될 analyzer예요. 기본적으로 색인 시점과 검색 시점 모두에서 사용돼요. 검색 시점에 재정의하려면 search_analyzer 파라미터를 설정해요. 기본값은 문법 기반 토큰화를 사용하고 Unicode Text Segmentation 알고리즘에 기반한 표준 analyzer예요. 루트 필드와 하위 필드를 구성해요. |
index |
필드를 검색 가능하게 할지 여부를 지정하는 불리언 값이에요. 기본값은 true예요. 루트 필드와 하위 필드를 구성해요. |
index_options |
검색과 하이라이팅을 위해 인덱스에 저장할 정보를 지정해요. 유효 값: docs(문서 번호만), freqs(문서 번호와 용어 빈도), positions(문서 번호, 용어 빈도, 용어 위치), offsets(문서 번호, 용어 빈도, 용어 위치, 시작·끝 문자 오프셋). 기본값은 positions예요. 루트 필드와 하위 필드를 구성해요. |
max_shingle_size |
최대 n-gram 크기를 지정하는 정수예요. 유효 값은 [2, 4] 범위예요. 생성할 n-gram은 [2, max_shingle_size] 범위예요. 기본값은 3이며, 2-gram과 3-gram을 만들어요. max_shingle_size 값이 클수록 더 구체적인 쿼리에 잘 작동하지만 인덱스 크기가 커져요. |
norms |
관련성 점수 계산 시 필드 길이를 사용할지 여부를 지정하는 불리언 값이에요. 루트 필드와 n-gram 하위 필드를 구성해요(기본값은 false). prefix 하위 필드는 구성하지 않아요(prefix 하위 필드에서는 norms가 false). |
search_analyzer |
검색 시점에 사용될 analyzer예요. 기본값은 analyzer 파라미터에 지정된 analyzer예요. 루트 필드와 하위 필드를 구성해요. |
search_quote_analyzer |
구문과 함께 검색 시점에 사용될 analyzer예요. 기본값은 analyzer 파라미터에 지정된 analyzer예요. 루트 필드와 하위 필드를 구성해요. |
similarity |
관련성 점수를 계산하는 랭킹 알고리즘이에요. 기본값은 BM25예요. 루트 필드와 하위 필드를 구성해요. |
store |
필드 값을 저장하고 _source 필드와 별도로 검색할 수 있게 할지 여부를 지정하는 불리언 값이에요. 기본값은 false예요. 루트 필드만 구성해요. |
term_vector |
이 필드에 대한 용어 벡터를 저장할지 여부를 지정하는 불리언 값이에요. 기본값은 no예요. 루트 필드와 n-gram 하위 필드를 구성해요. prefix 하위 필드는 구성하지 않아요. |