错误的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的位置?

错误的Nhibernate.搜索查询结果

好了,我找到解决办法了。

我使用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>();

解决了这个问题