Поиск многословной фразы с подстановочными знаками в lucene

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

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


person Adamon    schedule 20.09.2017    source источник
comment
Возможный дубликат Сопоставление всего предложения с пробелами в lucene BooleaQuery   -  person NightOwl888    schedule 21.09.2017
comment
Спасибо за ответ. Однако другие ответы не касаются возможности поиска по нескольким полям. Многофразовый запрос позволяет ввести только одно поле.   -  person Adamon    schedule 21.09.2017