Lucene - 解析Proximity查询时出现的错误

时间:2017-05-01 16:18:39

标签: lucene

我在使用lucene.net时为数据库编写动态搜索代码。 我开始创建查询并找到结果的位置,它工作得很好!! 但是当我使用Proximity Searches时,我收到一个错误:

  

第1行第72栏的词汇错误。遇到:之后:" \" "

我的搜索功能:

  private static List<String> GeneralSearch(string txt, Table type)
    {
        txt= "10~" + txt;
        string newQuery = "";
        foreach (var field in fields[type])
        {
            newQuery += field + ": " + txt + " OR ";
        }
        newQuery = newQuery.Substring(0, newQuery.Length - 4)+"  ";
        parser.MultiTermRewriteMethod = 
        MultiTermQuery.SCORING_BOOLEAN_QUERY_REWRITE;
        BooleanQuery bq = new BooleanQuery();
        Query query = parser.Parse(newQuery);
        bq.Add(query, Occur.MUST);
        bq.Add(new TermQuery(new Term("tbl", type.ToString())), Occur.MUST);
        TopDocs hits = searcher.Search(bq, reader.MaxDoc);........

&#34; txt&#34;变量包含如下查询:
txt =&#34;我喜欢阅读&#34;
该函数创建一个新查询,用于搜索特定表的所有字段

  标题:10~&#34;我喜欢阅读&#34;或内容:10~&#34;我喜欢阅读&#34;

我认为我的问题可能是语言对齐是从右到左 如果你有一个想法,它会帮助我!!

1 个答案:

答案 0 :(得分:0)

我无法说明具体的错误,但是您的查询有两种不正确的错误

  • slop(proximity)运算符必须跟踪查询而不是引导查询
  • 字面词组查询必须用双引号括起来

使用Query.ToString()记录查询结果是明智的。假设使用StandardAnalyzer,您的查询将解析为以下内容:

  

(文字:10~0.5文字:我发短信:喜欢文字:阅读)+ tbl: somevalue

您认为您的slop被解析为具有默认slop值0.5

的术语查询
  

文本:10〜0.5

你认为短语查询实际上解析为多个术语查询,因为你的短语不是双引号:

  

text:i text:like text:read

您希望原始查询看起来像这样:

  

text:&#34;我喜欢阅读&#34; ~10

这是关于Lucene query syntax的精彩指南。祝你好运!