我有一个包含terms
的表,这些术语实际上是用户添加的可能的搜索输入,看起来类似于:
| id | name | remote_id | type |
| --- | ------------- | ---------- | ---------- |
| 1 | Audi | 3453 | category |
| 2 | Audi RS | 52434 | model |
| 3 | Las Vegas | 30 | city |
| 4 | 1994 | 10 | production |
| 5 | Audi for sale | 3454 | category |
| 6 | Audi for rent | 3455 | category |
我想创建一个简单的方法来使用户对这种输入有良好的搜索结果:
Audi for sale 1994 in Las Vegas
我想从与输入句子匹配的表中获得最小结果,我需要的结果是:
1- Audi for sale
2- 1994
3- Las Vegas
但是我无法获得此结果,因为我尝试使用的是
"SELECT DISTINCT * FROM `terms` WHERE MATCH (name) AGAINST ('Audi for sale 1994 in Las Vegas' IN BOOLEAN MODE)"
但是后来我得到了我不想要的结果,例如Audi, Audi RS, Audi for rent
。
根据我的read here,我尝试将输入句子拆分为以下内容,并在每个单词前添加+
,然后搜索以尝试对所有单词进行搜索:
+Audi
+Audi +for
+Audi +for +sale
+Audi +for +sale +1994
+Audi +for +sale +1994 +in
+Audi +for +sale +1994 +in +Las
+Audi +for +sale +1994 +in +Las +Vegas
我尝试如下操作以确保单词的顺序与表中的记录相匹配:
SELECT DISTINCT * FROM `terms` WHERE MATCH (name) AGAINST ('(+Audi) (+Audi +for) (+Audi +for +sale) (+Audi +for +sale +1994) .....' IN BOOLEAN MODE)
但是这也使一些预期的结果丢失了,例如1994
和Las Vegas
。
我希望我能解释我要正确实现的目标,谢谢。
编辑
让我更加清楚,并添加更多详细信息,这一点是要避免用户在我的网站上使用FILTERS查找汽车,例如不要选择Audi,然后选择“ RS”,然后选择“ Las Vegas”,在生产年份“ 1994”,我想使用户能够在单个文本框中搜索Audi for sale 1994 in Las Vegas
,并且应该在后端进行过滤,以分离和分类要在其中使用的正确类别和参数。搜索过程。
如果我可以将“待售的奥迪”定义为category
,将“ 1994”定义为production
,将“拉斯维加斯”定义为city
,那么我可以简单地构建无需用户手动过滤就可以为用户获得正确结果的查询。