我有一个select语句,如果一个字符串包含下面的任何一个单词,它会选择它,但它不按单词包含的顺序选择。例如,如果数据库中的字符串是“三 二 一”,而不是“一 二 三”,它仍然会选择它。我想让它首先按照字符串的顺序优先选择,然后再尝试获取那些不按顺序的内容。这种可能吗?
$text1 = "one";
$text2 = "two";
$text3 = "three";
SELECT text,
((text LIKE '%$text1%') + (text LIKE '%$text2%') + (text LIKE '%$text3%')) as `matches`
FROM tableName
HAVING `matches` > 0
ORDER BY `matches` DESC, rand() LIMIT 1
更多例子: 因此,如果数据库中有2个字符串。
其中一个是:
"one two three"
另一个是
"three two one"
如果没有任何"one two three",我希望首先选择它,然后再选择"three two one"。
全文搜索
的关键点是它需要大量数据,小单词是停用词,并且需要通过配置进行训练。因此,这是一个可悲的例子,因为我不想在堆栈上放置一个40k行的表。这是Oracle的免费赠品,它满足了简单、相对容易的设置需求,但结果令人怀疑。然后人们转向solr、lucene、elasticsearch、fastsearch等技术,这些技术将全文搜索作为核心能力,而mysql则没有这种核心能力。 - Drew