免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2179 | 回复: 0
打印 上一主题 下一主题

lucene booleanquery排序 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-04-06 12:45 |只看该作者 |倒序浏览

1.lucene的相关度问题
  想实现以下的排序效果,检索词为"a b c“,排序结果:包含a&&b&&c的文件排在最前面,其次是包含a&&b和a&&c,然后为包含b&&c、a、b和c。lucene默认设置(检索词等同,即改变检索词的顺序,检索结果不变),看了帮助,决定构造booleanquery来设置权值,控制排序结果,达到了目的。如检索词为n个,则依次构造2n-1个booleanquery,并赋予递减的权值。代码如下(c#版本):


Code
1

public Hits Search(string key)
2



{
3

    Hits hits = null;
4

    BooleanQuery query = new BooleanQuery();
5

    string[] keywords = key.Split(' ');
6

    int n=keywords.Length;
7

    float m =( float)(Math.Pow(2, keywords.Length));
8

    try
9


   

{
10

        for (int i = 0; i  Math.Pow(2, keywords.Length) - 1; i++)
11


        

{
12

            BooleanQuery booleanquery = new BooleanQuery();
13

            for (int j = k; j n; j++)
14


            

{
15

                TermQuery q = new TermQuery(new Term("contents", keywords[j]));
16

                booleanquery.Add(q, BooleanClause.Occur.MUST);
17

            }
18

                booleanquery.SetBoost(m);
19

                m=m - 1;
20

                if (n != 1)
21


               

{
22

                    n--;
23

                }
24

                else
25


               

{
26

                    n = keywords.Length;
27

                    k++;
28

                }
29

                    query.Add(booleanquery, BooleanClause.Occur.SHOULD);
30

                }
31

32

                hits = searcher.Search(query);
33

               
34

    }
35

    catch (Exception e)
36


   

{
37

        Console.WriteLine(e.Message);
38

    }
39

    return hits;
40

}

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/94340/showart_1891086.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP