【问题标题】:MySQL search in PHP based on keyphrases基于关键字的 PHP 中的 MySQL 搜索
【发布时间】:2012-07-02 16:14:47
【问题描述】:

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

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

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

我想实现一个搜索功能:

  1. 搜索与特定项目相关的所有关键词
  2. 根据以下条件对结果进行排序:
    • 短语(如果搜索短语与特定关键字完全匹配)
    • 关键词顺序(我假设如果搜索匹配位置 1 上更相关的关键词)。

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

【问题讨论】:

    标签: php mysql search search-engine


    【解决方案1】:

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

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

    http://sphinxsearch.com/

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

    【讨论】:

    • 这是一个很好的建议——使用更适合这项工作的软件。我还想在组合中加入非常漂亮的elasticsearch
    • elasticsearch 一眼看上去不错,还有xapian。但我不想推荐我从未实际使用过的东西。
    【解决方案2】:

    我认为您必须使用全文进行搜索,因为您给出的排序结果之一是:如果搜索短语与特定关键字完全匹配。使用全文搜索将是更高分数的结果。

    对于您给出的第二个订单,您必须定义某种相关性(而不是全文的相关性)。当你搜索一些关键词时,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 将始终是第一个,因为它满足全文的要求并且处于结果最低位置。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-04-08
      • 2018-12-16
      • 2015-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多