请问,如何实现这样从查询!谢谢!

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运算前进行过滤的
Global site tag (gtag.js) - Google Analytics