我有多个表,比如make,model和year等,并使用连接。我想从一个文本字段中搜索。就像用户将键入"奥迪A1 2015 Red Variant",他将代表这个"奥迪A1 2015 Red Variant"那么我应该实现什么是正确的sql,您的建议将不胜感激?
SELECT
make.make_name,
model.model_name
FROM cars
INNER JOIN make
ON make.make_id = cars.fk_make_id
INNER JOIN model
ON model.model_id = cars.fk_model_id
WHERE cars.fk_make_id = 6
AND (make.make_name LIKE '%Audi A1%'
OR model.model_name LIKE '%Audi A1%')
以上sql返回0结果。
答案 0 :(得分:1)
实现这一目标并非易事,因为您需要能够确定用户输入中的哪个令牌应与哪个表中的哪个字段进行比较。可能有全文搜索引擎解决方案,如elasticsearch,已经做了你想要实现的目标。
Elasticsearch是一个基于Lucene的搜索引擎。它提供了一个分布式,多租户能力的全文搜索引擎,具有HTTP Web界面和无架构JSON文档。 Elasticsearch是用Java开发的,并根据Apache License的条款作为开源发布。 Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr,也基于Lucene
- 维基百科
如果您认为弹性搜索对您来说是一个陡峭的学习曲线,我建议您通过将搜索表单分成单个字段来简化并节省一些麻烦。