我正试图为我的网站创建一本词典。使用FREETEXTTable & Rank DESC返回搜索“服务器”:
“server”显然更接近“server”而不是“name server”。我该如何修正排名?
我不能仅仅逆转ASC,因为还有更糟糕的比赛。“神”的前三名是“神的作为”、“神的羔羊”、“勒神”。
编辑:很抱歉有任何混乱。名称服务器,服务器,服务器。在一个名为“word”的列中,这是用全文搜索查询的列。定义在下一列“定义”中,并作为查询结果返回。
发布于 2012-04-21 13:44:41
我认为你可以用联合来解决你的结果排序问题。
喜欢
select * from your_table_name where col_name = 'server'
union
select * from your_table_name where col_name like '%server%' order by col1,col2..这个查询应该为您提供第一行全文搜索,然后是部分搜索。
澄清.。请注意,通过col_name,我想说的是关于这个专栏的名字,你的话是什么。假设你的桌子结构是..。
字典-( c_word,c_definition,c_synonyms )
然后您必须将我的查询修改为
select * from Dictionary where c_word = 'server'
union
select * from Dictionary where c_word like '%server%' order by c_definition,c_synonyms这样,这个查询将首先显示c_word值与单词“server”完全匹配的位置,然后是部分搜索。
对于动态查询--您需要将'server'替换为要搜索的请求关键字的变量。
发布于 2012-04-29 21:58:25
我曾经使用PATINDEX函数来完成这个任务。如下所示:
SELECT
Word,
Definition
FROM
FREETEXTTABLE(Dictionary, Word, @search, 20) AS Matches
INNER JOIN Dictionary ON
Matches.Key = Dictionary.ID
ORDER BY
CASE PATINDEX('%' + @search + '%', Word)
WHEN -1 THEN 1000
ELSE PATINDEX('%' + @search + '%', Word)
END由于您使用全文索引来获得更小的结果集(在本例中,最多也是20 ),所以它的性能不太好。PATINDEX在表达式中查找字符串。如果表达式中不存在搜索字符串,则返回-1。如果您也在搜索定义,如果您的搜索与同义词或词干单词匹配(例如:搜索“已取”,因此“采取”被返回),或者如果搜索涉及多个单词,则可能会发生这种情况。CASE语句将这些结果排序到最后。
https://stackoverflow.com/questions/10259236
复制相似问题