[lucene] 用OR来搜索A B C field,在结果中,如何让符合条件的A数据先排,B次之、C最后?

MultiArrow 2010-03-23
如题,关键字搜索A、B、C field,只要任何一个field中的数据符合条件,就把整条document记录拿出来。
目前拿出的数据是乱的,即ABC的数据是交叉出现的。
现在想要的结果是:
把A field中的符合条件的document先拿出来显示,再拿B的,然后是C的。
有什么方法?

以下是使用的代码(用了IK):
String[] fields = { "A", "B", "C" };
Query query = IKQueryParser.parseMultiField(fields, keyword);
zhaobohao 2010-03-27
这个。。。这个。。。。。你单独对,a,b,c搜索3次不就完事了。
MultiArrow 2010-03-30
单独搜索3次可能数据有重复
zhaobohao 2010-03-30
搜索A的时候,可以加上must条件呀,不能有b,c,不就完事了。
chineselio 2010-03-30
检索时对
A、B、C field
Group.
展示时先按你需要的顺序展示
MultiArrow 2010-03-30
zhaobohao 写道
搜索A的时候,可以加上must条件呀,不能有b,c,不就完事了。

有想过,不过这样的话相当于对整个索引文件搜索了3遍,觉得效率不高。
MultiArrow 2010-03-30
chineselio 写道
检索时对
A、B、C field
Group.
展示时先按你需要的顺序展示

Group?分组?不是很明白什么意思,

不过我现在的处理情况是:
   先把N条数据拿出来,因为要把数据转成POJO,所以就在转型的过程中判断,符合A的先放到专门存放A数据的List中,符合B的就放到专门存放B数据的List,如此类推,然后再把ABC组成一个List。再到页面读取。
这种方法可用,但是觉得不够好。

因为分页的时候可能的情况是:在拿出的N条数据中,A数据还没全部拿完,就要拿B数据了。
而我想要的是,先拿完A数据,再B数据,然后是C数据。
TonyLian 2010-03-31
两个办法:
1)用BooleanQuery,连接符使用BooleanClause.Occur.SHOULD,即or的关系
2)把多个字/词,拼成一个String,但是中间要用空格分隔,这样Query自然会当做or的关系处理(如果中间没有空格,而是靠分词器分隔开,是and的关系)
zhaobohao 2010-04-01
楼主要的是排序,这个东西的性能好不到那里去。谁那里有1000W的数据,可以测试一下,用数据说话。
MultiArrow 2010-04-01
zhaobohao 写道
楼主要的是排序,这个东西的性能好不到那里去。谁那里有1000W的数据,可以测试一下,用数据说话。

确实要的是排序,zhaobohao你说的方法也可以考虑,不过性能不好。现在数据有100万,以后肯定会增加的。真是麻烦啊
Global site tag (gtag.js) - Google Analytics