首页 > 解决方案 > LUCENE.NET-如何修复在 C# 中生成的查询(更多的 4 个子句“OR”和多字段)

问题描述

在搜索和多字段中构建包含 4 个以上子句的查询。

查询生成

{(tittle:g?s* body:g?s* url:g?s*) (tittle:ge?* body:ge?* url:ge?*) (tittle:esg* body:esg* url:esg*) (tittle:esj* body:esj* url:esj*) (tittle:esy* body:esy* url:esy*)}

代码

var a = new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_30);
        var MulField = new MultiFieldQueryParser(Lucene.Net.Util.Version.LUCENE_30, fields, a);
        BooleanQuery BooleanBuild = new BooleanQuery();                        
        foreach (string t in g.terms)
        {
            BooleanBuild.Add(MulField.Parse(t+"*"), Occur.SHOULD);
        }
        TopDocs topDocs = searcher.Search(BooleanBuild, cnf.limitd);
        /*REGEX
        var rq=new RegexQuery(new Term("tittle",@"(j|g|y)h?eh?sh?uh?s(\w)*"));
        TopDocs topDocs = searcher.Search(rq, cnf.limitd);
        */
        List<ObjJSON> docs = new List<ObjJSON>(cnf.limit);

数据输出

点击显示图片

但还有 4 个条款

询问

{(tittle:gesus* body:gesus* url:gesus*) (tittle:gésus* body:gésus* url:gésus*) (tittle:gehsus* body:gehsus* url:gehsus*) (tittle:ghesus* body:ghesus* url:ghesus*) (tittle:géhsus* body:géhsus* url:géhsus*) (tittle:ghésus* body:ghésus* url:ghésus*) (tittle:gesus* body:gesus* url:gesus*) (tittle:gesús* body:gesús* url:gesús*) (tittle:gesuhs* body:gesuhs* url:gesuhs*) (tittle:geshus* body:geshus* url:geshus*) (tittle:gesúhs* body:gesúhs* url:gesúhs*) (tittle:geshús* body:geshús* url:geshús*) (tittle:gesus* body:gesus* url:gesus*) (tittle:gezuz* body:gezuz* url:gezuz*) (tittle:gesus* body:gesus* url:gesus*) (tittle:jesus* body:jesus* url:jesus*) (tittle:yesus* body:yesus* url:yesus*)}

输出数据

点击显示图片

注意:仅执行查询中的 4 个第一个子句。

坦克寻求帮助,对不起我的英语。

标签: c#lucene

解决方案


错误是max number class查询中的数字和类型,使用Multi Field Querywhit 覆盖new string [] {}接受 Lucene 格式的原始查询


推荐阅读