The searches so far have been simple: single names, filtered by age. Let’s try a more advanced, full-text search—a task that traditional databases would really struggle with.
지금까지의 검색은 이름 하나만을 검색하고, 나이를 filtering하는 단순한 검색이었다. 기존의 DB와 진정으로 겨뤄볼 수 있는, 더 고급스러운 full-text 검색을 해 보자.
We are going to search for all employees who enjoy rock climbing:
rock climbing을 즐겨 하는 모든 직원을 찾아보자.
GET /megacorp/employee/_search { "query" : { "match" : { "about" : "rock climbing" } } }
You can see that we use the same match
query as before to search the about
field for "rock climbing". We get back two matching documents:
"rock climbing" 을 about
field에서 찾기 위해, 이전과 동일한 match
query를 사용한 것을 알 수 있다.
{ ... "hits": { "total": 2, "max_score": 0.16273327, "hits": [ { ... "_score": 0.16273327, "_source": { "first_name": "John", "last_name": "Smith", "age": 25, "about": "I love to go rock climbing", "interests": [ "sports", "music" ] } }, { ... "_score": 0.016878016, "_source": { "first_name": "Jane", "last_name": "Smith", "age": 32, "about": "I like to collect rock albums", "interests": [ "music" ] } } ] } }
By default, Elasticsearch sorts matching results by their relevance score, that is, by how well each document matches the query. The first and highest-scoring result is obvious: John Smith’s about
field clearly says "rock climbing" in it.
기본적으로, Elasticsearch는 일치하는 결과를 relevance score에 따라 정렬한다. relevance score는 각 document가 query에 얼마나 많이 일치하는가를 나타낸다. 가장 먼저 나오고, 가장 score가 높은 결과는 확실하다. John Smith의 about
field에는 "rock climbing" 이 분명히 들어가 있다.
But why did Jane Smith come back as a result? The reason her document was returned is because the word "rock" was mentioned in her about
field. Because only "rock" was mentioned, and not "climbing", her _score
is lower than John’s.
그런데, Jane Smith는 왜 결과로 나오는가? 그녀의 document가 결과로 나온 이유는 그녀의 about
field에 "rock" 이라는 단어가 언급되어 있기 때문이다. "rock" 이라는 단어만 언급되고, "climbing" 은 없기 때문에, 그녀의 _score
가 John보다 낮다.
This is a good example of how Elasticsearch can search within full-text fields and return the most relevant results first. This concept of relevance is important to Elasticsearch, and is a concept that is completely foreign to traditional relational databases, in which a record either matches or it doesn’t.
이 예제는 Elasticsearch가 full-text field 내에서 검색할 수 있는 방법과, 가장 관련 있는 결과를 먼저 돌려준다는 것을 보여주는 좋은 예제이다. relevance 라는 이 개념은, Elasticsearch에서 중요하며, record가 일치하는지 여부를 따지는 기존의 RDB와는 전혀 다른 개념이다.
'2.X > 1. Getting Started' 카테고리의 다른 글
1-01-08. Search with Query DSL (0) | 2017.10.01 |
---|---|
1-01-09. More-Complicated Searches (0) | 2017.10.01 |
1-01-11. Phrase Search (0) | 2017.10.01 |
1-01-12. Highlighting Our Searches (0) | 2017.10.01 |
1-01-13. Analytics (0) | 2017.10.01 |