2012-11-27 4 views
1

Недавно я начал играть с lucene.net для внутреннего проекта на работе. Я хочу создать тип автозаполнения с помощью lucene.net. В моем индексе хранится отображаемое имя, и когда я делаю поиск подстановочных знаков. Джеймс * работает отлично.Несколько слов поиска в поле

Проблема, кажется, в том, что пространство между словом i.e. James Bon * Кажется, забывает первое слово и начинает пытаться сочетаться с Bon.

Не уверен, что я делаю что-то не так, но попытался использовать несколько различных анализаторов, но не повезло.

У кого-нибудь есть идеи, которые могли бы установить меня на правильном пути?

28/11/2012

После снова глядя на мой проект, я понял, что я использовал MultiFieldQueryParser, чтобы попытаться найти несколько полей. Пробовал предложение об изменении DefaultOperator, но не повезло.

var analyzer = new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_30); 
var mparser = new MultiFieldQueryParser(Lucene.Net.Util.Version.LUCENE_30, new string[] { "displayname", "company", "email" }, analyzer); 
+0

Вы пробовали 'queryParser.SetDefaultOperator (QueryParser.Operator.AND);'? –

+0

«Lucene поддерживает одно- и многосимвольные групповые поисковые запросы в пределах одного термина (не в фразовых запросах)». [Источник] (http://lucene.apache.org/core/old_versioned_docs/versions/2_9_1/queryparsersyntax.html) –

+0

Спасибо за предложение. Попробуй и расскажи. –

ответ

2

По умолчанию Lucene.net выполняет OR поиск на предоставленных условиях, а не AND поиска. Используйте этот код, чтобы изменить его:

parser.SetOperator(QueryParser.DEFAULT_OPERATOR_AND); 
0

Если вы только выполнение нескольких запросов слово на одном поле, то вы хотите мульти слово вести себя как «как» оператор, то используйте ниже линии.

parser.DefaultOperator = QueryParser.Operator.AND; 
Смежные вопросы