我将文档存储在Solr中,如下所示,这两个文档属于user_id 9.通过搜索标题和描述来获取文档,我再次过滤10 km半径范围内的最短距离,这是正常工作。但有时用户更改其位置,这意味着我必须更新该user_id的所有文档,适用于小文档编号但超过500个文档,这很糟糕。
{
"id":"11",
"title":"post title",
"description":"Post description.",
"created_at":"2017-12-30T13:56:22Z",
"updated_at":"2017-12-30T13:59:28Z",
"user_id":9,
"name":"SHOP Name",
"company_name":"Company Name",
"latitude":26.2915005,
"longitude":50.1811244
},
{
"id":"12",
"title":"post title2",
"description":"Post description2.",
"created_at":"2017-12-30T13:56:22Z",
"updated_at":"2017-12-30T13:59:28Z",
"user_id":9,
"name":"SHOP Name",
"company_name":"Company Name",
"latitude":26.2915005,
"longitude":50.1811244
}
我想到的一个解决方案是存储单独的用户和发布文档并进行加入查询,但根据Solr加入,您无法获取所有字段(Reference link)。
对于习惯于SQL的人来说,注意加入SQL非常重要 Solr并不等同于SQL连接,因为没有信息 关于正在加入的桌子"来自"被推进决赛 结果。更合适的SQL类比将是"内部查询"。
我想到的第二个是在Mysql上创建单独的用户数据并在Mysql端更新位置或其他用户信息,因为我不必更新Solr上的文档。当有人搜索时,我首先从Solr获得所有匹配的帖子,之后我将通过从mysql获取用户数据并返回结果来手动过滤10 km半径的最短距离。但这会使搜索速度变慢。
如果有人有任何建议请告诉我,以便我可以解决这个问题。我认为更好的解决方案是在Solr上创建单独的用户文档并以某种方式加入。 Solr中有什么东西我缺少什么功能?