我正在用PHP编写一个原型拍卖/列表项目(MySQL后端)。
我有一个列表表(列表)和一个关键字表(listings_keyphrases),其中包含描述每个项目的多个关键字短语。每个列表都有多个关键字短语(根据需要),但是每个键短语都是字符--限制为20个字符。
因此,在listings_keyphrases中,一个清单可以有6行,每个行都有一个不同的关键字。listings_keyphrases表中的键短语是有序的。
我想实现一个搜索功能:
我研究了MySQL全文和一些其他选项,但还没有找到最好的前进方向。有什么想法吗?
发布于 2012-07-02 16:37:48
发布于 2012-07-02 16:43:36
我认为您必须使用全文搜索,因为您给出的排序结果之一是:如果搜索短语与特定的关键字完全匹配。与全文搜索,这将是结果与更多的分数。
对于您给出的第二个顺序,您必须定义某种相关性(而不是全文的相关性)。当您搜索一些关键字mysql并不关心它是第一个还是最后一个,你必须告诉它。如果插入关键阶段的顺序很重要,您可以通过全文搜索和ID_keyphrase (假设ID_keyphrase是自动数字的)的相关性来排序结果,或者可以添加一个字段来表示您的相关性,或者可以使用该位置(但位置作为数据库中的字段)。
举个例子:
Keyphrase_table
-----------
ID
listing_table_id
keyphrase
relevance有了这个,你就可以拥有:
1 1 keyphrase2 1
2 1 keyphrase1 2
3 2 keyphrase1 1id=1的清单有两个关键字短语(keyphrase2和keyphrase1),id=2的清单有一个关键字短语(keyphrase1)。
如果使用全文搜索"keyphrase1“,结果将是记录2和3。所有2个结果与全文具有相同的相关性,因为两者是相同的,但如果按顺序在搜索(Order by THE_RELEVANCE_OF_FULLTEXT DESC,relevance ASC)中添加新字段”相关性“,记录3将始终是第一个字段,因为它满足全文的请求,处于结果最低位置。
https://stackoverflow.com/questions/11297402
复制相似问题