我正在用PHP(MySQL后端)编写原型拍卖/列表项目。
我有一个列表(列表)和一个关键短语表(listings_keyphrases),它有多个描述每个项目的关键短语。每个列表都有多个关键短语(尽可能多),但每个关键短语的字符限制为20个字符。
因此,在listing_keyphrases中,单个列表可能有6行,每个列都有不同的关键短语。 listing_keyphrases表中的关键短语是有序的。
我想实现一个搜索功能:
我已经研究过MySQL FULLTEXT和其他一些选项,但还没有找到最好的前进方法。有什么想法吗?
答案 0 :(得分:3)
答案 1 :(得分:1)
我认为您必须使用全文搜索,因为您提供的排序结果之一:如果搜索短语与特定关键短语完全匹配。通过全文搜索,它将获得更多分数。
对于您提供的第二个订单,您必须定义某种相关性(而不是全文的相关性)。当你搜索一些关键短语时,mysql并不关心它是第一个还是最后一个,你必须告诉它。如果插入关键阶段的顺序很重要,您可以通过全文搜索和ID_keyphrase的相关性来订购结果(假设ID_keyphrase是自动数字),或者您可以添加一个字段来指示您的相关性,或者您可以使用该位置(但作为字段中的位置)数据库)。
一个例子:
Keyphrase_table
-----------
ID
listing_table_id
keyphrase
relevance
你可以拥有:
1 1 keyphrase2 1
2 1 keyphrase1 2
3 2 keyphrase1 1
id = 1的列表有2个关键短语(keyphrase2和keyphrase1),id = 2的列表有1个关键短语(keyphrase1)
如果您搜索" keyphrase1"使用全文,结果将是记录2和3.所有2个结果与全文相同,因为两者都相同,但如果您添加新的字段"相关性"在你的搜索中(Order by THE_RELEVANCE_OF_FULLTEXT DESC,relevance ASC
),记录3将是第一个,因为它符合全文的重新获得并且在结果中处于最低位置。