Поиск фразы из нескольких слов с подстановочными знаками в люцене

Используя следующий блок кода:

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

0 ответов

Другие вопросы по тегам