目前认识到的ES就是进行了简单的name匹配,age过滤。来试试更高级的-全文检索-一个传统数据库依然挣扎的任务。
现在要搜索对”rock climbing“感兴趣的员工信息,如下:
GET /megacorp/employee/_search
{
"query":{
"match":{
"about":"rock climbing"
}
}
}
像以前一样这里使用到了match查询about这个field包含rock climbing。看看结果:
{
...
"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"]
}
}
]
}
}
注释处的名词relevance scores
默认情况下ES会根据搜索结果的相关度进行排序,也就是说文档和搜索条件的匹配度。匹配度最高的排在前面。这也说明了Jane Smith为什么会出现在结果里,因为他的about这个field出现了rock这个单词,但是仅仅匹配了搜索条件中的rock,所以他的得分要比John的低。
这是个很好的例子,说明了ES是怎样进行全文检索,并根据相关度进行返回结果的。relevance对ES来说是很重要的概念,这个概念对返回结果要么是符合要么不符合的传统关系型数据库来说是完全陌生的。
原文:http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/_full_text_search.html
全文检索(full-text search),布布扣,bubuko.com
原文地址:http://www.cnblogs.com/blog1350995917/p/3716505.html