使用以下代码块:
public void MultiField(string fieldValue, string[] fieldList)
{
List<Occur> occurs = new List<Occur>();
foreach (string field in fieldList)
{
occurs.Add(Occur.SHOULD);
}
MultiFieldQueryParser parser = new MultiFieldQueryParser(Lucene.Net.Util.Version.LUCENE_30, fieldList, analyzer);
parser.AllowLeadingWildcard = true;
Query qry = parser.Parse(fieldValue.ToLower());
booleanQuery.Add(qry, Occur.MUST);
}
其中fieldValue是用户输入,fieldList是字段的集合列表。我正在使用标准分析仪。
我需要能够搜索启用了通配符的多个单词。在用户输入搜索词(例如“搜索”)时的当前状态,我的应用程序中的逻辑将向任一侧添加*,使其成为“* search *”。这带来了预期的结果。
但是,如果用户输入“搜索s”,它将搜索所有字段“*搜索”,然后再搜索所有字段“s *”;返回的方式超过了预期的结果。我试图逃避特殊字符/空格但是这也删除了通配符搜索,因为“*”是一个特殊字符。我已经尝试使用转义方法并在fieldValue字符串中添加“\”“。有没有办法将整个短语封装到搜索中并在搜索词的开头和结尾附加星号?