ES入门3-全文检索概述
2018-05-06 本文已影响0人
加碘盐_ed6c
全文检索定义
全文检索是将存储于数据库中整本书、整篇文章中的任意内容信息查找出来的检索。它可以根据需要获得全文中有关章、节、段、句、词等信息,也就是说类似于给整本书的每个字词添加一个标签,也可以进行各种统计和分析。类似于mysql里的like语句。例如,它可以很快的回答“《红楼梦》一书中“林黛玉”一共出现多少次?”的问题。
全文索引就是把内容根据词的意义进行分词,然后分别创建索引,例如”你们的激情是因为什么事情来的” 可能会被分词成:“你们“,”激情“,“什么事情“,”来“ 等token这样当你搜索“你们” 或者 “激情” 都会把这句搜出来。
Match Query
比如我们要查询索引为twitter,索引类型为tweet的user为kimchy的文档记录。
curl -XGET 'http://localhost:9200/twitter/tweet/_search' -d '
{
"query" :
{
"match":{"user":"kimchy"}
}
}'
Match Query也还包括一些其它的参数:query、operator、zero_terms_query等
{
"query" :
{
"match":{
"user":"kimchy",
"message":{
"query" : "this is a test",
"operator" : "and"
}
}
}
}
Term Query
term query在给定的字段里查询词或者词组。
curl -XGET 'http://localhost:9200/twitter/tweet/_search' -d '
{
"query" :
{
"term" : { "user" : "Kimchy" }
}
}
'
Term与Match的区别,如下代实例
curl -XGET 'http://localhost:9200/my_index/my_type/_search' -d '
{
"query": {
"match": {
"full_text": "Quick Foxes!"
}
}
}
'
curl -XGET 'http://localhost:9200/my_index/my_type/_search' -d '
{
"query": {
"term": {
"full_text": "Quick Foxes!"
}
}
}
'
在默认情况下,match是查询匹配"Quick"或者"Foxes!"或者"Quick Foxes!",而term只查询匹配"Quick Foxes!"。
Regexp Query
假设现在你想匹配在W地域(Area)的所有邮政编码,那我们怎样来匹配呢?我们这一节就来介绍一下regexp匹配。
curl -XGET 'http://localhost:9200/my_index/address/_search -d '
{
"query": {
"regexp": {
"postcode": "W[0-9].+"
}
}
}
'
这个正则表达式的规定了词条需要以W开头,紧跟着一个0到9的数字,然后是一个或者多个其它字符。
regexp所要匹配的字段要以正则式的形式出现。如以上代码中"W[0-9].+"。
Range Query
假设现在你想匹配年龄(age)在10到20岁之间的所有信息,我们这一节就来讲解如何匹配,将会用range来匹配。
curl -XGET 'http://localhost:9200/class/students/_search' -d '
{
"query":{
"range" : {
"age" : {
"gte" : 10,
"lt" : 20
}
}
}
}
'
其中range的参数包括gt(>)、lt(<)、gte(>=)、lte(<=)、boost。