使用以下代码块:
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”,它将在所有字段中搜索“*search”,然后再次在所有字段中搜索“s*”;返回的方式超过了预期的结果。我试图转义特殊字符/空格,但这也删除了通配符搜索,因为“*”是一个特殊字符。我已经尝试使用转义方法并在 fieldValue 字符串中添加“\””。有没有办法封装整个短语来搜索并在搜索词的开头和结尾附加星号?