Используя следующий блок кода:
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*»; возвращая намного больше, чем желаемые результаты. Я попытался избежать специальных символов/пробелов, однако это также удаляет поиск по подстановочным знакам, поскольку «*» является специальным символом. Я попробовал это, используя метод escape и добавив "\"" в строку fieldValue. Есть ли способ инкапсулировать всю фразу для поиска и добавить звездочки в начале и конце поискового запроса?