我是想做一个多域查询
比如在所有field中查询“开源 项目”
要求结果既含“开源”又含“项目”
但是“开源” 和“项目” 这两个关键字不一定要出现在同一个field中用MultiFieldQueryPaser发现它是搜索出了所有含“开源”或者“项目”的条目
改变parser.setDefaultOperator(QueryParser.AND_OPERATOR);默认逻辑符为and后
又变成“开源” 和“项目” 这两个关键字必须在同一个字段中
都不符合要求这种需求应该是很常见的吧,不知道别的人是怎么处理的?

解决方案 »

  1.   

    利用好中文分词技术可以查看下面网站http://lucene.org.cn/read.php?tid=2868
      

  2.   

    什么叫广告阿,我们也碰到过这个问题,比lz说的还复杂,还有对英文的搜索。好不容易找到的解决办法,人家写好的封装好的jar包,我拿过来分享你还说我做广告

    强烈鄙视2楼。
      

  3.   

    构造一个新的field,把所有的东西都加到这个field。然后对一般搜索只搜索这一个field就可以了。其它fields可以用于更精确的搜索。
      

  4.   

    还鄙视……
    你自己看清楚我的问题
    我问的是搜索,又不是分词,鄙视你自己吧还是楼上的说的对,目前只能采用构造一个field的方法
    lucene布尔查询的逻辑中只有should和must,用这两个是构造不出我希望的逻辑的
      

  5.   

     string[] keys = key.Split(' ');
                    if (keys.Length > 1)
                    {
                        IList<Query> queryList = new List<Query>();                    foreach (string wd in keys)
                        {
                            Query query = parser.Parse(wd);
                            queryList.Add(query);
                        }                    foreach (Query query in queryList)
                        {
                            // 多个关键词之间是或的关系
                            bquery.Add(query, BooleanClause.Occur.SHOULD);
                        }                }