php - 如何使用 IN 查询在 solr join 中执行多个条件?

标签 php mysql solr lucene search-engine

如何将下面的Mysql转换为solr? 我尝试使用 solr join 来实现它,但我不知道如何通过 IN 查询在 solr join 中使用多个条件。

SELECT * 
FROM rooms
WHERE 
departure_g_date = "2016-08-04T00:00:00Z"
AND returning_g_date = "2016-08-05T00:00:00Z"
AND (room_adults_child = '1-0' OR (room_adults_child = '2-1' AND child_age = 1))
AND hotel_id IN (
                    SELECT hotel_id 
                    FROM rooms 
                    WHERE 
                        departure_g_date = "2016-08-04T00:00:00Z"
                        AND returning_g_date = "2016-08-05T00:00:00Z"
                        AND room_adults_child = '1-0'
        )
AND hotel_id IN (
                    SELECT hotel_id 
                    FROM rooms
                    WHERE 
                        departure_g_date = "2016-08-04T00:00:00Z"
                        AND returning_g_date = "2016-08-05T00:00:00Z"
                        AND room_adults_child = '2-1'
        )

最佳答案

你不能! Solr 不是关系数据库,其设计目的不是直接匹配您的结构。相反,它的目的是让事情变得更容易。因此,您必须从您试图查找的内容开始向后思考,并将数据库映射到该内容。

就您而言,粒度似乎是某种可用性。因此,也许这会成为您的 Solr 文档,其中包含 hotelId、RoomId、RoomType、DateAvailable(单日)。然后,您基本上会查找 DateAvailable 在您的范围内的正确类型的所有房间。也许按 RoomId 分组。然后,您需要检查该可用性是否是连续的,无论是使用 Solr 还是在原始数据库中。

关于php - 如何使用 IN 查询在 solr join 中执行多个条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38802797/

相关文章:

solr - 为什么必须在长查询字符串中的每个数字之间添加 OR?

PHP MySQL 类别树父级 ID

php - 编码 mysqli_fetch_assoc

php - 在 MySQL 中将一个特定字母放在所有其他字母之前

java - 带有额外列的多对多(Hibernate 4)

php - 左连接右系统

java - Solr 一次数百万个搜索查询

lucene - 在没有针对内容所用语言的分析器的情况下实现 Lucene?

nginx - PHP-FPM : Operation not permitted

PHP MySQL : decrypt a column value from a MySQL row that was encrypted upon insertion and parse to JSON