错误的Nhibernate.搜索查询结果
本文关键字:查询 结果 搜索 Nhibernate 错误 | 更新日期: 2023-09-27 17:53:28
我正在通过nhibernate查询lucene索引。使用下面的代码搜索:
var fts = NHibernate.Search.Search.CreateFullTextSession(this._session);
var luceneQuery = "Search:name~0.7 AND Moderated:true NOT PlaceType:WrongType";
var places = fts.CreateFullTextQuery<Place>(luceneQuery)
.List<Place>();
问题是查询返回所有类型的place,包括WrongType。当我尝试对卢克中的相同索引运行相同的查询时,一切都很好,类型WrongType的地方不返回。
Search字段是Place对象中多个字段的串联。我正在使用Moderated和PlaceType字段来过滤掉一些记录,正如我发现的那样,以这种方式保留了Lucene查询的原始排序顺序(按分数)。
如何从使用NHibernate.Search的结果中排除PlaceType的位置?
好了,我找到解决办法了。
我使用WhiteSpaceAnalyzer索引了所有字段。似乎NHibernate。Search在默认情况下使用StandardAnalyzer,不管我已经将全局AnalyzerClass设置为WhiteSpaceAnalyzer。解析查询后,它看起来像这样:
"+Search:name~0.7 +Moderated:true -PlaceType:wrongtype"
不能工作,因为PlaceType字段中的值不是小写的。
把问题中的代码改成这样:
var fts = NHibernate.Search.Search.CreateFullTextSession(this._session);
var queryParser = new QueryParser("text", new WhitespaceAnalyzer());
var luceneQuery = "Search:name~0.7 AND Moderated:true NOT PlaceType:WrongType";
var query = queryParser.Parse(luceneQuery);
var places = fts.CreateFullTextQuery(query, typeof(Place))
.List<Place>();
解决了这个问题