首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >错误的Nhibernate.Search查询结果

错误的Nhibernate.Search查询结果
EN

Stack Overflow用户
提问于 2011-04-27 20:04:12
回答 1查看 550关注 0票数 0

我使用以下代码通过nhibernate.search查询lucene索引:

代码语言:javascript
复制
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对象中多个字段的串联。正如我所发现的那样,我使用have和PlaceType字段来过滤掉一些记录,以这种方式保留了Lucene query中的原始排序顺序(按分数)。

如何使用NHibernate.Search从结果中排除PlaceType的Places?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-04-28 18:46:21

好了,我找到了解决方案。

我已经使用WhiteSpaceAnalyzer为所有字段建立了索引。看起来NHibernate.Search默认使用StandardAnalyzer,不管我已经将全局AnalyzerClass设置为WhiteSpaceAnalyzer。在解析查询之后,它看起来像这样:

代码语言:javascript
复制
"+Search:name~0.7 +Moderated:true -PlaceType:wrongtype"

这不起作用,因为PlaceType字段中的值不是小写的。

将问题中的代码更改为如下所示:

代码语言:javascript
复制
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>();

解决了这个问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5803785

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档