2012-11-27 77 views
1

我最近开始在lucene.net中玩一个在工作的内部项目。我正在寻找使用lucene.net创建一种自动完成类型。我的索引存储的显示名称,当我做通配符搜索,即詹姆斯*它工作正常。字段中的多字搜索

这个问题似乎是当这个词之间的空间,即詹姆斯邦尼*它似乎忘记了第一个字,并开始尝试和匹配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执行所提供的条件,而不是一个AND搜索的搜索OR。使用此代码来改变它:

parser.SetOperator(QueryParser.DEFAULT_OPERATOR_AND); 
0

如果你只是执行上单场多字查询,那么你要多字更像“喜欢”操作,然后使用下面一行。

parser.DefaultOperator = QueryParser.Operator.AND;