在字段中进行多字搜索

时间:2012-11-27 21:55:26

标签: c# lucene.net

我最近开始在lucene.net上玩一个内部项目。我希望使用lucene.net创建一种自动完成。我的索引存储了显示名称,当我进行通配符搜索时,James *它工作正常。

问题似乎是当空间出现在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);

2 个答案:

答案 0 :(得分:2)

默认情况下,Lucene.net会对提供的字词执行OR次搜索,而不是AND次搜索。使用此代码进行更改:

parser.SetOperator(QueryParser.DEFAULT_OPERATOR_AND);

答案 1 :(得分:0)

如果您只是在单个字段上执行多字查询,那么您希望多字的行为类似于“喜欢”操作符,然后使用下面的行。

In [16]: from operator import itemgetter

In [17]: sorted_data = sorted(commission_list, key=itemgetter('code'))

In [18]: for g, data in groupby(sorted_data, key=itemgetter('code')):
   ....:     print(max(data, key=itemgetter('runningdt')))
   ....:     
{'runningdt': datetime.datetime(2016, 4, 17, 0, 0), 'code': 'COMMISSION_CODE1', 'value': 120}
{'runningdt': datetime.datetime(2016, 4, 19, 0, 0), 'code': 'COMMISSION_CODE2', 'value': 210}
{'runningdt': datetime.datetime(2016, 4, 20, 0, 0), 'code': 'COMMISSION_CODE3', 'value': 310}