MySQL 带有子表达式的 bool 全文搜索

标签 mysql database full-text-search information-retrieval

我想在 MySQL 中编写 bool 全文搜索查询。但我想按以下顺序得到结果:

完全匹配 > 包括所有单词 > 包括部分单词

(> 表示更高。)

通过以下查询,我得到了更高的精确匹配:

SELECT *, MATCH(name,description,address) 
AGAINST('>("word1 word2 word3") <(word1 word2 word3)' IN BOOLEAN MODE) 
AS score FROM samples WHERE MATCH(name,description,address) 
AGAINST('>("word1 word2 word3") <(word1 word2 word3)' IN BOOLEAN MODE) ORDER BY score DESC

通过以下查询,我得到的文档包含的所有单词都高于包含查询某些部分的单词:

SELECT *, MATCH(name,description,address) 
AGAINST('>(+word1 +word2 +word3) <(word1 word2 word3)' IN BOOLEAN MODE) 
AS score FROM samples WHERE MATCH(name,description,address) 
AGAINST('>(+word1 +word2 +word3) <(word1 word2 word3)' IN BOOLEAN MODE) ORDER BY score DESC  

但我想合并这两个查询。这是迄今为止我得到的最好的结果,但我没有得到我想要的结果。

SELECT *, MATCH(name,description,address) 
AGAINST('>("word1 word2 word3") <(>(+word1 +word2 +word3) <(word1 word2 word3))' IN BOOLEAN MODE) 
AS score FROM samples WHERE MATCH(name,description,address) 
AGAINST('>("word1 word2 word3") <(>(+word1 +word2 +word3) <(word1 word2 word3))' IN BOOLEAN MODE) 
ORDER BY score DESC

有没有办法在没有 UNION 的情况下做到这一点?

最佳答案

这行得通吗?

  SELECT *,
         MATCH (name,description,address) 
           AGAINST ('"word1 word2 word3"' IN BOOLEAN MODE) score_exact,
         MATCH (name,description,address) 
           AGAINST ('+word1 +word2 +word3' IN BOOLEAN MODE) score_all,
         MATCH (name,description,address) 
           AGAINST ('word1 word2 word3' IN BOOLEAN MODE) score_some
    FROM samples
   WHERE MATCH (name,description,address) 
           AGAINST ('word1 word2 word3' IN BOOLEAN MODE)
ORDER BY score_exact DESC, score_all DESC, score_some DESC

关于MySQL 带有子表达式的 bool 全文搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34534207/

相关文章:

c# - 从本地xampp mysql-database获取数据

mysql - 在node中查询mysql后res.render无法获取结果参数

mysql - 如何在mysql查询中对计算字段进行四舍五入

MySQL 数据库迁移和同步

python - 减少从大型 SQLAlchemy 数据库中检索行的时间

MySQL全文关键字顺序?

search - Mysql 搜索与非文本搜索的搜索工具(CloudSearch、Sphinx、Solr..)

php - 如何使用登录表单将密码用户名与 php mysql 匹配

database - 如何从 Git 存储库中丢失的 blob 中恢复?

solr - 如何提高solr中搜索文本的排名?