V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
wangxiaolongbob
V2EX  ›  Lucene

关于Lucene的一个菜鸟问题?

  •  
  •   wangxiaolongbob · 2012-07-03 00:32:38 +08:00 · 6266 次点击
    这是一个创建于 4511 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我数据库表里面有这样一条数据(字段名:值):
    question:可以到淘宝大学去学习吗?
    replay:淘宝大学,就是在淘宝网上,就是淘宝开通的学习频道而已!
    label:听课

    这3个字段分别对应lucene索引里面的3个Field:question,replay,label。然后我要建立IndexSearcher的时候,在QueryParser中一定要指定某一个域,这让我有点郁闷。我的愿望是:这3个域都搜索,比如我输入“学习频道听课”(分词后为 学习 频道 听课),要能搜索到这篇DOC,我该怎么做???(我用的分词器是IK分词器,另外不能用MultifieldQueryParser,因为他会把 “学习 频道 听课”分别去我指定的多个域里面匹配,比如我指定了question和label域,那么他就把“学习 频道 听课”放到question匹配,然后放到label域匹配,最后将2则匹配的文档进行逻辑与,这样当然匹配不到了啊。)求指点!!!!
    3 条回复    1970-01-01 08:00:00 +08:00
    virushuo
        1
    virushuo  
       2012-07-03 01:23:56 +08:00
    用booleanquery 你可以把多个条件组合起来,多少个fields都可以。
    kafka0102
        2
    kafka0102  
       2012-07-03 01:42:49 +08:00
    这个和IKQueryParser的多field没关系的,它的多field之间是或关系的。问题出在单field上,ik对分词之间使用的And关系。对于分词使用and关系通常是ok,如果直接的or关系会查到很多不相关的,并且因为计算score的偏差使得结果很烂。不过,实际使用来说,可以对query解析结果做些判断,比如如果都是英文字符,使用phrase关系构造,中文类使用And关系,如果返回结果过少,可以再来一次or关系查询。但就你的情况来说,可以再额外构造一个字段包装那几个字段的内容(相当于solr中的copyfield)。
    wangxiaolongbob
        3
    wangxiaolongbob  
    OP
       2012-07-03 09:38:34 +08:00
    @kafka0102 哈哈,谢谢你啊。我找到了改进问题的2个突破口,这样应该能达到我的目的了。你说“这个和IKQueryParser的多field没关系的,它的多field之间是或关系的。问题出在单field上,ik对分词之间使用的And关系。”我觉得是对的,我觉得这里根本就不适合用多Field查询。接下来要优化的事情:增加一个复制字段(把那3项内容合并起来,到时候就查询这个字段就好了),但是这个字段应该是自动产生的,不应该是管理源维护。另外根据你中间部分所说的还可以尝试优化一下。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2324 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 15:59 · PVG 23:59 · LAX 07:59 · JFK 10:59
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.