码迷,mamicode.com
首页 > 其他好文 > 详细

字符串排序和多字段排序(string sorting and multi-fields)

时间:2014-06-10 13:18:45      阅读:366      评论:0      收藏:0      [点我收藏+]

标签:class   http   ext   get   使用   数据   

被分词的string字段也是一个multi-value字段,但是对他们进行排序往往得不到想要的结果。如果你对”fine old art“进行分词,他将会返回三个term。我们也许对以一个term进行字母排序,然后第二个等。但是ES没有在这个期间的时间顺序。

你可以使用min和max排序模式(默认使用min),但是结果既不是art或者old也不是任何想要的结果。

为了对string field进行排序,这个field就只能是一个term:也就是一个not_analyzed类型的string。但是我们是需要对string进行分词的,以便于我们能够查询。

一个不成熟的做法是插入两个相同的string,一个为了搜索使用分词,一个为了排序不使用分词。

但是在_source中存储两个相同的string是浪费空间的做法,然而我们真的想在一个field中使用两种不同的存储方式。所有的核心字段类型——string,number,boolean,date——都接受fields参数,这个参数允许你想下面的这个样子进行mapping:

"tweet":{
   
"type":     "string",
   
"analyzer":"english"
}

转换为:

"tweet":{bubuko.com,布布扣
   
"type":     "string",
   
"analyzer":"english",
   
"fields":{
       
"raw":{bubuko.com,布布扣
           
"type":  "string",
           
"index":"not_analyzed"
       
}
   
}
}

标记1表示:主要的tweet字段和之前的是一样的:是一个analyzed的full text field。

标记2表示:这个tweet.raw子字段不分词。

现在,至少等我们重新插入数据,我们可以使用tweet字段进行搜索,并且根据tweet.raw进行排序:

GET /_search
{
   
"query":{
       
"match":{
           
"tweet":"elasticsearch"
       
}
   
},
   
"sort":"tweet.raw"
}

对analyzed的full text进行排序是很耗费内存的,详情请见: Field data 

 

原文:http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/multi-fields.html

字符串排序和多字段排序(string sorting and multi-fields),布布扣,bubuko.com

字符串排序和多字段排序(string sorting and multi-fields)

标签:class   http   ext   get   使用   数据   

原文地址:http://www.cnblogs.com/blog1350995917/p/3778273.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!