0

我正在用 PHP(MySQL 后端)编写原型拍卖/列表项目。

我有一个列表表 (listings) 和一个关键词表 (listings_keyphrases),其中包含多个描述每个项目的关键词。每个列表都有多个关键词(尽可能多),但每个关键词的字符限制为 20 个字符。

因此,在 listings_keyphrases 中,一个列表可能有 6 行,每行都有不同的关键词。Listings_keyphrases 表中的关键词是有序的。

我想实现一个搜索功能:

  1. 搜索与特定项目相关的所有关键词
  2. 排序结果基于:
    • 短语(如果搜索短语与特定关键字完全匹配)
    • 关键词顺序(我假设如果搜索匹配位置 1 上更相关的关键词)。

我研究了 MySQL FULLTEXT 和其他一些选项,但还没有找到最好的方法。有任何想法吗?

4

2 回答 2

3

我会尝试以下搜索引擎之一:

http://lucene.apache.org/solr/

http://sphinxsearch.com/

它们都是开源的,有据可查且易于使用。

于 2012-07-02T16:37:48.317 回答
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 将始终是第一个,因为它满足全文的要求并且处于结果最低位置。

于 2012-07-02T16:43:36.327 回答