Поиск фразы из нескольких слов с подстановочными знаками в люцене
Используя следующий блок кода:
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. Есть ли способ инкапсулировать всю фразу для поиска и добавления звездочек в начале и в конце поискового запроса?