我在使用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;
我认为我的问题可能是语言对齐是从右到左 如果你有一个想法,它会帮助我!!
答案 0 :(得分:0)
我无法说明具体的错误,但是您的查询有两种不正确的错误
使用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的精彩指南。祝你好运!