分享

关于lucene,solr,elasticsearch的问题。

ld512870 发表于 2015-3-14 16:43:07 [显示全部楼层] 只看大图 回帖奖励 阅读模式 关闭右栏 5 118372
前段时间研究过lucene。当时看过一篇文档,说是lucene每条文档,在每个segment中都有唯一的id。但是这个id是可变的。在段与段合并的时候会发生改变。那么,lucene中能够指定某个文档的唯一字段,比如id吗?如果不能,那么solr,elasticsearch,他们的底层都是lucene,而且都有唯一id,是怎么实现的呢?再就是查询。因为solr,和es都有唯一id,当我们进行相同id数据索引的时候,后来的会覆盖以前存在的数据。其基本原理就是重新索引,那么,我们查询的时候,就很有可能会查到两条一样的数据,他们是怎么去重的呢?保证数据的唯一性?

已有(5)人评论

跳转到指定楼层
xuanxufeng 发表于 2015-3-14 21:47:10
的确容易查到重复的,比如两个文档都含有相同的内容,这个是不需要去重的。而且我们可以根据相关性来判断哪个是我们想要的。

这里有个不错的书籍,讲了lucence的原理
链接:http://pan.baidu.com/s/1c093cgo 密码:9ocn
回复

使用道具 举报

jixianqiuxue 发表于 2015-3-14 20:42:01
那么,我们查询的时候,就很有可能会查到两条一样的数据,他们是怎么去重的呢?保证数据的唯一性?
楼主的疑问,能举个例子吗?
索引是更新的,并且是前面覆盖后面的。
回复

使用道具 举报

ld512870 发表于 2015-3-18 14:59:28
jixianqiuxue 发表于 2015-3-14 20:42
那么,我们查询的时候,就很有可能会查到两条一样的数据,他们是怎么去重的呢?保证数据的唯一性?
楼主的 ...

我知道是可以更新的。就比如说更新吧。我在这一次的提交中插入了一条数据a=a,这个时候形成了一个segment。里面有我的数据a=a。一段时间过去之后,我接收到新的命令,更新a=a这条数据为a=b,因为lucene中segment不能修改,只能以后合并去重。然后提交。又形成了一个segment。这个时候如果我们去查询的话。在整个索引里其实有两条数据,我们取出来的是更新后的数据,那么,lucene是如果判断后面这一条是我们要找的,而不是前面那一条呢?

回复

使用道具 举报

ld512870 发表于 2015-3-18 15:05:02
xuanxufeng 发表于 2015-3-14 21:47
的确容易查到重复的,比如两个文档都含有相同的内容,这个是不需要去重的。而且我们可以根据相关性来判断哪 ...

谢谢,这个文档确实是好东西。有些数据是不需要去重的,但是比如solr中的id。可以通过id来保证数据唯一性。新来的数据覆盖老的数据。因为segment只能写,这个肯定也可能在索引中有两个段分别存着同一id的新数据和老数据。是如何判断新数据和老数据的呢?如何只取出来新数据,而老数据被过滤掉?在lucene中能实现吗?
回复

使用道具 举报

s060403072 发表于 2015-3-18 18:37:38
ld512870 发表于 2015-3-18 15:05
谢谢,这个文档确实是好东西。有些数据是不需要去重的,但是比如solr中的id。可以通过id来保证数据唯一性 ...

不太明白楼主的意思,这个应该不会有重复。
首先对数据建立索引,然后根据索引查找文档。
楼主说的重复,首先查询的数据不会重复。

如下结构,无论是原理,还是查询的过程,应该都不会重复。
楼主说的重复,能否画个图
1.png



2.png
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条