【问题标题】:Encountered "<EOF>" Lucene.net 3.0.3 QueryParser Error遇到“<EOF>”Lucene.net 3.0.3 QueryParser 错误
【发布时间】:2017-10-01 03:15:34
【问题描述】:

当搜索文本在短语末尾包含“AND”时出现错误。

searchQuery:"文本与"

    private static Query parseQuery(string searchQuery, QueryParser parser)
    {
       Query query;
       try
       {
         query = parser.Parse(searchQuery.Trim());
       }
       catch (ParseException e)
       {
         query = parser.Parse(QueryParser.Escape(searchQuery.Trim()));
       }
       return query;
    }

【问题讨论】:

    标签: c# lucene lucene.net


    【解决方案1】:

    更新它涵盖了我的所有场景。

    我的问题解决了。当我得到异常时,我将搜索查询替换为小写的后者。

    searchQuery:"Text AND"
    

    将其替换为小写字母后将如下所示:

    searchQuery:"text and"
    

    它适用于我的情况并涵盖了我的所有场景。

     private static Query parseQuery(string searchQuery, QueryParser parser)
     {
        Query query;
        try
        {
          query = parser.Parse(searchQuery);
        }
        catch (ParseException e)
        {
          query = null;
        }
        if (query == null)
        {
          string replacedQuery;
          cooked = Regex.Replace(searchQuery, @"\B[A-Z]", m => "" + m.ToString().ToLower());
          cooked = Regex.Replace(cooked, "[^a-zA-Z0-9]+", " ");
          query = parser.Parse(replacedQuery);
        }
        return query;
    }
    

    现在此解决方案适用于以下查询类型:

    • “文字+”
    • "Text =" 注意:字符串末尾的任何特殊字符。
    • “文本与”注意:字符串末尾的任何布尔运算符。
    • “文本和数据”

      注意:剩余的查询语法作为 lucene.net 提供的所有查询语法(即短语语法、布尔运算符语法、通配符查询)

    【讨论】:

    • 这不是解决方案。如果@searchQuery =“文本+”怎么办?您的正则表达式处理将引发另一个 ParseException。如果您可以控制查询的构建,那么修复就在那里;否则错误应该返回给调用者。
    • @RamblinRose 任何导致解决方案的示例请在下面给出答案。提前致谢
    • 您也可以使用QueryParser.Escape,是的,这确实可以解决问题。我是一个好奇的人,我的经历让我不禁要问:“AND”的来源是哪里?你在索引“和”吗?
    • 您在我的问题中没有看到 QueryParser.Escape 吗?我尝试了这个,但在我的场景中不起作用。
    • @RamblinRose 如果您对所有场景有任何解决方案,那么在下面给出答案将不胜感激。
    猜你喜欢
    • 2018-01-19
    • 1970-01-01
    • 2016-11-25
    • 1970-01-01
    • 2013-09-15
    • 2015-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多