目前 SQL '%like%' 搜索用于获取包含某些关键字的所有行。我们正在尝试用 Lucene-Solr 替换 MySQL 之类的搜索。
我们构建了索引,
- 用关键字查询到 solr,
- 检索所有相应记录的主键,
- 用PK查询到mysql
- 并获取结果。
它变慢了。该死!
我认为 1、2、3 中使用的带宽是原因(因为结果非常大,比如 100 万+),但我想不出更好的方法。
除了 CSV over http,还有其他方法可以获取 solr 搜索结果吗?(如 mysql 中的文件转储)
目前 SQL '%like%' 搜索用于获取包含某些关键字的所有行。我们正在尝试用 Lucene-Solr 替换 MySQL 之类的搜索。
我们构建了索引,
它变慢了。该死!
我认为 1、2、3 中使用的带宽是原因(因为结果非常大,比如 100 万+),但我想不出更好的方法。
除了 CSV over http,还有其他方法可以获取 solr 搜索结果吗?(如 mysql 中的文件转储)
我们做了同样的过程来结合 solr 和 mysql,它比单个 mySql 全文搜索快 100-1000 倍。
因此,您的工作流程/程序通常不是问题。问题是:你的瓶颈在哪里。要对此进行调查,您应该查看 catalina 以查看每个 solr 请求的查询时间。在 MySQL 上也一样 - 看看查询时间/长时间运行的查询。
我们遇到了性能问题,因为返回的 PK 数量非常大 -> 因此 mySQL 查询非常大,因为where in ()
子句非常长。
随后是一个非常大的 MySQL 语句,其中许多行返回 200-1.000.000+
但关键是,应用程序/用户不需要一次这么大的约会。所以我们决定使用分页和偏移(在 solr 方面)。Solr 现在只返回 30-50 个结果(取决于用户应用程序环境的分页设置)。
这工作得非常快。
//编辑:除了 CSV over http,还有其他方法可以获取 solr 搜索结果吗?
有不同的格式,例如 XML、PHP、CSV、Python、Ruby 和 JSON。要更改这一点,您可以使用wt
参数,例如....&wt=json
http://wiki.apache.org/solr/CoreQueryParameters#wt
http://wiki.apache.org/solr/QueryResponseWriter
//编辑#2
另一种方法可能不仅仅是将数据索引到 solr。您可以(额外)将数据存储到 solr,以便从 solr 获取数据并且无需 MySQL 数据即可生存。这取决于你的数据,如果这对你来说是一种方式......
您不能将所有 MySQL 数据库检索到 Solr 吗?
您可以使用DIH(数据导入处理程序)从 MySQL 检索所有数据并非常容易地添加到 Solr。
然后,您将在一个地方获得所需的所有信息,我认为您将获得更好的性能。