首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Server全文进行类似字典的搜索

使用Server全文进行类似字典的搜索
EN

Stack Overflow用户
提问于 2012-04-21 13:13:35
回答 2查看 2.2K关注 0票数 0

我正试图为我的网站创建一本词典。使用FREETEXTTable & Rank DESC返回搜索“服务器”:

  1. name server -映射人类可读的名称的程序或服务器.
  2. 服务器-服务人员;服务员或服务生;
  3. 服务器-托盘盘子;沙拉。4.

“server”显然更接近“server”而不是“name server”。我该如何修正排名?

我不能仅仅逆转ASC,因为还有更糟糕的比赛。“神”的前三名是“神的作为”、“神的羔羊”、“勒神”。

编辑:很抱歉有任何混乱。名称服务器,服务器,服务器。在一个名为“word”的列中,这是用全文搜索查询的列。定义在下一列“定义”中,并作为查询结果返回。

EN

回答 2

Stack Overflow用户

发布于 2012-04-21 13:44:41

我认为你可以用联合来解决你的结果排序问题。

喜欢

代码语言:javascript
复制
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 )

然后您必须将我的查询修改为

代码语言:javascript
复制
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'替换为要搜索的请求关键字的变量。

票数 0
EN

Stack Overflow用户

发布于 2012-04-29 21:58:25

我曾经使用PATINDEX函数来完成这个任务。如下所示:

代码语言:javascript
复制
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语句将这些结果排序到最后。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10259236

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档