错误的Nhibernate.Search查询结果

时间:2011-04-27 12:04:12

标签: c# .net lucene.net nhibernate.search

我使用以下代码通过nhibernate.search查询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>();

问题是查询返回所有类型的地方,包括WrongType。当我尝试在Luke中对同一个索引运行相同的查询时,一切正常,不会返回类型为WrongType的地方。

搜索字段是Place对象中许多字段的串联。我正在使用Moderated和PlaceType字段过滤掉一些记录,正如我所发现的那样,这样就可以保留Lucene查询的原始排序顺序(按分数)。

如何使用NHibernate.Search?

从结果中排除PlaceType

1 个答案:

答案 0 :(得分:0)

好的,所以我找到了解决方案。

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

解决了这个问题。