【问题标题】:Return samples of phrases containing hit on keywords in fulltext search mysql在全文搜索mysql中返回包含命中关键字的短语样本
【发布时间】:2014-08-26 06:53:24
【问题描述】:

如果您在 mysql 中有文档记录,并且您对文档中的关键字进行全文搜索,您如何不仅返回记录的 id,还返回包含关键字的每个文档的示例短语?

例如搜索“超人”

可能会返回两条记录...

“我什么时候可以取回我的西装?” 超人问干洗店

“就他而言,超人没有机会”

【问题讨论】:

  • 在进行全文搜索时,为什么不在选择部分选择文档呢?这将返回文档部分以及 id
  • 谢谢约翰。这不会返回整个文档,而不仅仅是围绕 found 关键字的几个单词?或者是这样的想法,然后你使用php从doc中提取包含关键字的句子?
  • 好吧,我不知道。这取决于您在该列中存储的内容.. 如果它是一个完整的文档,那么您可能想要使用字符串方法来查找几个单词.. 或者您可以在 php 的服务器端执行此操作。如果您想更详细地澄清一下,那么我可能会为您写一个答案;)
  • 如果您想在 php 中执行此操作,请参阅此帖子。它做你想做的事。stackoverflow.com/questions/3684754/…

标签: mysql full-text-search


【解决方案1】:

这里有一个mysql解决你的问题

SELECT 
  CONCAT_WS(' ',
            TRIM(SUBSTRING_INDEX(
                 SUBSTRING(bigstr, 1, INSTR(bigstr, 'Superman') - 1 ),
                 ' ',
                 -8)
            ),
            TRIM(SUBSTRING_INDEX(
                 SUBSTRING(bigstr, INSTR(bigstr, 'Superman')),
                 ' ',
                 5)
            )
  )
FROM longstring

我刚刚制作了一个示例表。因此,对于您的情况,将 bigstr 的任何实例更改为包含数据的列(也就是您的文档)。然后包含“超人”的字符串是关键字。因此,将其更改为您要搜索的单词,它会在之前和之后返回几个单词。我刚刚做了-8,它将在关键字之前返回 7 个单词,在关键字之后返回 5 个单词。因为这就是您的示例的外观.. 但是如果您将 -8 和 5 更改为任意数字,它将是之前和之后的单词数

DEMO

【讨论】:

  • 哇——谢谢约翰。我将选择 mysql 解决方案而不是 php 解决方案。我今天要工作,所以这只是整天坐在这里取笑我,直到我可以回家实施它。我很高兴通过 Paypal 为您提供完整的解决方案,因为它节省了我尝试另一个第三方站点搜索解决方案的时间,这对于我需要索引的少量文档来说非常有用。
  • @Shaun 无需支付宝我.. 这不是需要几天工作的事情.. :) 如果您需要更多帮助,请给我一个嗡嗡声,我可以尝试提供帮助!这对我来说是一个很好的挑战,因为我以前从来没有这样做过,所以我在途中学到了一两件新东西。这就是为什么我在这里学习新东西并在我所做的事情上做得更好。并回答问题对此有很大帮助!
  • 我已经输入了代码并且运行良好,John。使它完美的一件事-我想知道如何维护bigstr的情况?例如,目前如果 bigstr 是“Holy cow, what a grand day”,并且搜索词是 COW(全部大写),你如何让它返回“Holy cow, what a grand day”而不是“Holy COW ,多么美好的一天”?或者这超出了mysql的能力范围吗?再次感谢您的时间和帮助。
  • @Shaun 两件事...... COW 在字符串本身中吗?还是只是搜索词?我还编辑了我的答案。如果你想试试:)
  • 完美,谢谢。对于那些想知道的人:添加“WHERE bigstr LIKE '%Superman%'”来过滤结果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-26
  • 2010-10-18
  • 2016-06-06
  • 2021-04-22
  • 1970-01-01
相关资源
最近更新 更多