2014-07-25 45 views
0

我想将我的lucene从3.0升级到4.9。我根据国家编写了一个自定义排序,只需查看该国是否与查询相同,然后是文件大陆与该大陆的距离与查询要查找的距离有多大。Lucene按国家排序

这不是一个过滤器 - 我想要所有的结果,只是按国家排序。

例如 - 我正在寻找鞋店,我在美国。

所以所有在美国的鞋店将是第一,其次是加拿大,墨西哥,英国,俄罗斯& c。

我的自定义排序不编译,我找不到任何如何在lucene 4.X中编写自定义排序的示例。

我看了一下地理空间搜索,但也似乎先过滤,然后排序。

任何人都可以帮我一个自定义排序为lucene 4.X的例子吗?

回答

2

也许,这个问题最好被看作是一个评分问题,而不是排序问题。这样,问题就变成了:如何使用国家之间的距离(而不是df/idf指标)对文档进行评分。一旦他们得分正确,默认的排序方法将是合适的。

基本上,有必要扩展CustomScoreQueryCustomScoreProvider类。

此博客文章(Lucene Custom Scoring)显示了扩展的示例。

为了更确切的一点,我的建议是:

1加“的距离知识”你的延伸CustomScoreProvider;

2-在覆盖的customScore方法检索文档的国家;

3-计算文档所在国家和查询国家之间的距离(请记住通过CustomScoreQuery放置此信息);

4-返回你的分数:)

我希望这个策略适合你。

P.S.该博客文章与4.6版相关。为了在版本4.9中正常工作,可能需要进行一些调整。

+0

谢谢。我实际上已经开始使用solr,只是用一个函数来完成它。这是一个简单的,但完成工作: if(termfreq(country,$ country), - 1,abs(sub(field(continent),$ continent)))asc – user1139675