说我的要求是
"search for all users by name, who are over 18"
如果我使用 SQL,我可能会写这样的内容:
Select * from [Users]
Where ([firstname] like '%' + @searchTerm + '%' OR
[lastname] like '%' + @searchTerm + '%')
AND [age] >= 18
然而,我很难将其翻译成 lucene.net。
这是我到目前为止所拥有的:
var parser = new MultiFieldQueryParser({ "firstname", "lastname"}, new StandardAnalyser());
var luceneQuery = parser.Parse(searchterm)
var query = FullTextSession.CreateFullTextQuery(luceneQuery, typeof(User));
var results = query.List<User>();
如何添加“年龄 >= 18”位?
我听说过.SetFilter()
,但这仅接受 LuceneQueries,而不接受 IQueries。如果SetFilter
是正确的使用方式,如何制作合适的过滤器?如果没有,我该使用什么以及如何做?
Thanks!
附:这是我为了清楚起见而尝试做的事情的一个大大简化的版本,我的WHERE
子句实际上比这里显示的要复杂得多。实际上,我需要检查子查询中是否存在 id 并检查许多未索引的属性。给出的任何解决方案都需要支持这一点。
Thanks
对于年龄字段,您需要一个范围搜索 http://lucene.apache.org/java/2_4_1/queryparsersyntax.html#Range%20Searches,用 Lucene 的语法编写,如下所示:
age:[18 TO 100]
正如甘道夫所说,你可以使用查询包装过滤器 http://lucene.apache.org/java/2_4_1/api/org/apache/lucene/search/QueryWrapperFilter.html。我不确定 Nhibernate 搜索中是否存在这种情况。类似地,您可以使用“AND”来进一步限制您的查询。
我不确定您可以对未索引的属性做什么。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)