【问题标题】:Trim last characters of word in full text search在全文搜索中修剪单词的最后一个字符
【发布时间】:2016-06-29 16:45:55
【问题描述】:

我的数据库中保存了自动完成选项。我的搜索以与我需要的方式完全相同的方式给出结果。全文。 但是在搜索方面,我想从每个搜索的单词中删除最后 2 个字符。即使搜索查询由多个单词组成。

问题在于我的母语根据名词的性别在形容词中使用不同的最后 1-2 个字符。交易是用户不必输入不同类型的形容词来获得不同的结果,但这样无论他以哪种方式输入形容词,他都会得到所有相同的结果。这可能吗?

例子

你输入的内容:1. bonita chiita 2. nice girlie

全文检索:1. boni chici 2. ni girl

【问题讨论】:

  • 你能发布一些预期结果的例子吗?
  • 发布了其他示例。它基本上是一个全文搜索,最后一个字符被修剪......让我们说每个单词中的 2 个字符。(示例中只有 1 个单词)
  • 你一直让我感到困惑。您在每个单词中说修剪 2 个字符,但您只修剪示例中的最后一个单词?否则一个简单的子字符串会做吗?
  • 对不起,这只是一个例子......想保持简单的语言......当然所有的单词都会被修剪:)
  • 如果您说所有单词都将被修剪掉每个单词的最后 2 个字符,则可以使用子字符串。请张贴作为答案,以便我可以将其发送给我的同事,为他指明正确的方向。谢谢

标签: php search full-text-search


【解决方案1】:

现在我将回答如何从提供的每个单词中修剪最后 2 个字符,并将在新信息出现时更新答案。

$string = 'bonita chicita';
$array = explode(' ', $string); // Adds each word into an array

// Loop through each word in the array and remove the last 2 characters
for($i=0; $i<count($array); $i++) {
    $array[$i] = substr($array[$i], 0, strlen($array[$i])-2) . '%'; // For adding wildcards in place of the 2 removed characters
}

// Recreate the string from the array
$newString = implode(' ', $array);

// This will now echo boni chici
echo $newString;

您也可以将其放入一个函数中以供多种用途。

function editString($string) {
    $array = explode(' ', $string); 

    for($i=0; $i<count($array); $i++) {
        $array[$i] = substr($array[$i], 0, strlen($array[$i])-2) . '%'; // For adding wildcards in place of the 2 removed characters
    }

    return implode(' ', $array);    
}

echo editString("bonita chicita"); // echos boni chici

为了使用您的数据库设计方式进行搜索,您需要使用 % 通配符代替已删除的 2 个字符,因此可以在 substr() 之后添加 $array[$i] .= '%',然后使用新的通配符字符串搜索数据库。

我在SQL Fiddle 上尝试过这个,它似乎有效。

【讨论】:

  • 有人告诉我我们正在使用“匹配”。我们必须继续使用全文搜索。我们无法改变这一点。这可以在全文搜索中使用吗?
猜你喜欢
  • 1970-01-01
  • 2011-04-04
  • 1970-01-01
  • 2014-11-07
  • 1970-01-01
  • 2015-04-01
  • 2012-01-04
  • 2013-11-06
  • 1970-01-01
相关资源
最近更新 更多