A keen observer will notice that all the queries so far in this book have operated on whole terms. To match something, the smallest unit had to be a single term. You can find only terms that exist in the inverted index.
눈썰미가 좋은 독자라면, 지금까지 이 책의 모든 query는 전체 단어를 기준으로 동작된다는 것을 알아차렸을 것이다. 어떤 것과 일치한다는 것은, 가장 작은 단위가 단일 단어이어야 한다. inverted index에 존재하는 단어만을 검색할 수 있다.
But what happens if you want to match parts of a term but not the whole thing? Partial matchingallows users to specify a portion of the term they are looking for and find any words that contain that fragment.
그러나, 전체가 아닌 단어의 일부분이 일치해야 한다면 어떻게 될까? 부분 일치(Partial matching) 는 사용자가 검색하려는 단어의 일부를 지정하고, 해당 조각을 포함하는 모든 단어를 검색하는 것이다.
The requirement to match on part of a term is less common in the full-text search-engine world than you might think. If you have come from an SQL background, you likely have, at some stage of your career, implemented a poor man’s full-text search using SQL constructs like this:
full-text 검색 엔진의 세계에서, 단어의 일부가 일치하는 상황은 여러분들이 생각하는 것보다 덜 일반적이다. SQL을 알고 있다면, SQL 구문을 이용하여 아래와 같이 빈약한 full-text 검색 을 구현할 수 있다.
Of course, with Elasticsearch, we have the analysis process and the inverted index that remove the need for such brute-force techniques. To handle the case of matching both "fox" and "foxes", we could simply use a stemmer to index words in their root form. There is no need to match partial terms.
물론, Elasticsearch는 분석 프로세스와, 무차별 대입(brute-force) 기술 같은 것이 필요하지 않는 inverted index를 가지고 있다. "fox" 와 "foxes" 모두에 일치하는 경우를 처리하기 위해서, 단순히 단어의 원형으로 단어를 색인하는, 형태소 분석기(stemmer)를 사용할 수 있다. 단어의 일부에 일치할 필요가 없다.
That said, on some occasions partial matching can be useful. Common use cases include the following:
그렇지만, 어떤 경우에는 부분 일치가 유용할 수 있다. 일반적인 사용 예는 아래와 같다.
Matching postal codes, product serial numbers, or other
not_analyzed
values that start with a particular prefix or match a wildcard pattern or even a regular expression우편번호, 제품 일련 번호 또는 특별한 접두어로 시작하는 다른
not_analyzed
값에 일치하거나, 어떤 wildcard pattern이나 정규식에 일치search-as-you-type—displaying the most likely results before the user has finished typing the search terms
Instant(순간) 검색(search-as-you-type)—사용자가 검색어 입력을 끝내기 전에, 가장 가능성 있는 결과를 표시
Matching in languages like German or Dutch, which contain long compound words, like Weltgesundheitsorganisation (World Health Organization)
Weltgesundheitsorganisation (World Health Organization - 세계보건기구)처럼, 긴 복합어를 포함하는 독일어(German), 네델란드어(Dutch) 같은 언어에서의 일치
We will start by examining prefix matching on exact-value not_analyzed
fields.
exact-value not_analyzed
field에 대한 접두어 일치를 확인하면서, 시작해 보자.
'2.X > 2. Search in Depth' 카테고리의 다른 글
2-4-6. Improving Performance (0) | 2017.09.24 |
---|---|
2-4-7. Finding Associated (0) | 2017.09.24 |
2-5-1. Postcodes and Structured Data (0) | 2017.09.24 |
2-5-2. prefix Query (0) | 2017.09.24 |
2-5-3. wildcard and regexp Queries (0) | 2017.09.24 |