请问,如何实现这样从查询!谢谢!
snake_liu
2008-07-28
刚用LUCENE,我有两个实体,BOOK 和 TYPE
BOOK:bookid,bookname,typeid Type: typeid,typename 我的索引是这样的 <bookid:153><bookname:book3><typename:b> <bookid:123><bookname:book2><typename:a> <bookid:234><bookname:book1><typename:a> 这样的話,比方我想查询,书名包含book 的type 结果我就会查询出3条记录,但是显然有两条记录的TYPE是相同的,我不知道如何才能在LUCENE查询的时候就去除掉这个重复的TYPE a. 另外,请问我这么建立索引是否正确谢谢! |
|
imjl
2008-07-28
参考 http://lucene.apache.org/java/docs/queryparsersyntax.html
|
|
snake_liu
2008-07-28
是否可以给个具体点的提示呢。
比方,需要用什么样的QUERY去实现,或者是我的索引建立的本身就有问题。 谢谢! |
|
jiqiumin
2008-07-29
BooleanQuery,或者 过滤,又或者。。。有多种实现方式
|
|
dlovek
2008-07-29
<typename:a><book.id:123><book.name:book2><book.id:234><book.name:book1>
如果像这种索引形式,一个type同N个book一起建立为一条索引,当查询条件为book.id:123 AND book.name:book1,会返回一条数据。它没有在每一个独立的book对象中进行属性的匹配查找,而是把所有的book对象集合起来,无论条件数据符合哪个book对象,只要符合就会把所有book全部返回。但这条返回结果同实际情况是不一致的,这个需求也是非常普通平常的。如何实现这条查询条件,使得返回为空呢。 |
|
amigobot
2008-07-29
你把程序的数据, type信息, 放到了索引里面了。做好不要这样做, 索引并不会想关系数据库有范式,有distinct。
可以只返回id, 然后在数据库后得到不重复的type信息。 如果type不会被索引使用, 就不要放到index里面了。 |
|
moshalanye
2008-07-30
用Filter 去实现吧,把name 和type一样 重复的先过滤掉,再用你的query查就问题了,你可以借鉴下org.apache.lucene.search.PrefixFilter的实现看下,也不难得,自己去写一个filter filter是在query进行boolean运算前进行过滤的
|