Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Lucene改进基于位置的搜索性能_Lucene_Lucene.net - Fatal编程技术网

使用Lucene改进基于位置的搜索性能

使用Lucene改进基于位置的搜索性能,lucene,lucene.net,Lucene,Lucene.net,我正在使用Lucene,使用.net创建一个求职门户。 在下面的用例中,我面临一些与性能相关的问题。 用例是: 在进行求职时,用户可以选择工作地点(例如:佐治亚州亚特兰大)并选择径向距离(例如50英里)。从Lucene返回求职结果所需的时间相当长 仅供参考,我们正在维护一个sql server 2005数据库,用于存储美国和加拿大的城市、州、经度和纬度(共包含约100万条记录) 我是否可以改进这种基于位置的工作搜索的性能?基本上,您有两种类型的搜索参数:文本和空间。 您可能可以使用一种类型来过滤

我正在使用Lucene,使用.net创建一个求职门户。 在下面的用例中,我面临一些与性能相关的问题。 用例是: 在进行求职时,用户可以选择工作地点(例如:佐治亚州亚特兰大)并选择径向距离(例如50英里)。从Lucene返回求职结果所需的时间相当长

仅供参考,我们正在维护一个sql server 2005数据库,用于存储美国和加拿大的城市、州、经度和纬度(共包含约100万条记录)


我是否可以改进这种基于位置的工作搜索的性能?

基本上,您有两种类型的搜索参数:文本和空间。 您可能可以使用一种类型来过滤从另一种类型获得的结果。 例如,对于在佐治亚州亚特兰大附近寻找.NET开发人员工作的人 您可以首先检索所有.NET开发人员作业并筛选位置, 或者检索亚特兰大的所有作业并筛选.NET开发人员作业。 我认为第一个应该更快。 您还可以将工作地点直接存储在Lucene中,并将其合并到搜索中。 草稿是: 索引: 1.当您收到新的“通缉”广告时,请使用数据库查找其地理位置。 2.将位置存储为广告文档中的Lucene字段。 检索: 1.根据文本匹配检索所有作业。 2.使用几何计算查找用户位置和工作位置之间的距离。 3.根据距离过滤作业


有一个精神上相似的空间搜索的例子。正在酝酿中。此外,请检查并确认。还有和,但我不知道它们有多成熟。

我的索引大小约为4 MB。我使用以下代码构建最近城市的查询:

foreach (string city in htNearestCities.Keys)
                {
                    cityStateQuery = new BooleanQuery();
                    queryCity = queryParserCity.Parse("\"" + city + "\"");
                    queryState = queryParserState.Parse("\"" + ((string[])htNearestCities[city])[1] + "\"");
                    cityStateQuery.Add(queryCity, BooleanClause.Occur.MUST); 
                    cityStateQuery.Add(queryState, BooleanClause.Occur.MUST);

                    findLocationQuery.Add(cityStateQuery, BooleanClause.Occur.SHOULD);
                    }

您可能最终希望lucene通过索引处理空间搜索。但是,如果您确定lucene查询速度慢,而不是城市的查找速度慢,那么可以先将州和城市索引在一起。很像为关系数据库中的多个列编制索引:一个“state:city”字段,其值类似于“GA:Atlanta”。那么在查询时就不会进行交叉。

您能否详细说明一下,您是如何使用Lucene对数据库进行基于位置的搜索的?例如,当用户搜索“佐治亚州亚特兰大”时,Lucene如何知道距离它50英里以内的城市?它必须首先查询数据库吗?谢谢你的评论。我们有一个基于.Net的距离API,它将位置作为输入,并返回给定半径内最近的城市。然后将此集合提供给Lucene以搜索工作。那么你是否在Lucene索引中搜索字符串“Atlanta,GA”?你在做什么?你是将“亚特兰大,乔治亚州”作为一个术语索引,还是将其拆分为代币?我在名为“城市”的字段中为亚特兰大编制索引,在Lucene索引中为“州”编制索引。你的Lucene索引有多大?只要索引美国的每个城市和州,就可以了。这将是一个非常小的指数,应该是闪电般的快。您使用什么类型的查询来查找正确的城市?4MB?对于这么小的数据集来说,Lucene有点过分了。