我最近开始在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);
答案 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}