我有一个名为hotel
的表格,其中包含以下信息:
Hotel_Id
:2950 Hotel_Name
:公园旅馆Hotel_Number
:01234567 Hotel_TypeId
:1 我需要能够搜索名称列包含特定术语的记录。
搜索是:
select *
from ContainsTable(hotel, Hotel_Name, '"Inn on Park"')
我没有结果,但如果我搜索:
select *
from ContainsTable(hotel, Hotel_Name, '"In on Park"')
我得到了
Key: 2950
Rank: 176
我认为“旅馆”这个词存在一些问题,但如果我搜索:
select *
from ContainsTable(hotel, Hotel_Name, '"Inn"')
我回到同一把钥匙:2950,排名:176结果。
“inn”是导致此问题的关键字吗?
答案 0 :(得分:3)
这是我的理论..
您的酒店名称Inn on the Park
将是这样的索引:
pos word
1 Inn
2 (noise)
3 (noise)
4 Park
on 和 是停用/干扰词,而不是存储在索引中(但请注意该位置仍然存储)。
您正在搜索完整的字符串。考虑到噪音词,这意味着:
Query 1: "Inn on Park" -> "Inn (noise) Park"
Query 2: "In on Park" -> "(noise) (noise) Park"
您的索引字符串(酒店名称)为Inn (noise) (noise) Park
,因此这将是第二个查询的部分匹配,但第一个查询不匹配。
可以通过搜索Inn 1 1 Park
来测试。这将返回一个结果。但Inn 1 Park
或1 Inn 1 Park
不会(职位不对应)。
To" fix"这可以使用不同的运算符,如AND,OR或NEAR:
"Inn" AND "Park"
"Inn*"
"Inn" NEAR "Park"
以下是两个屏幕截图,显示了主要查询的结果。注意第二个只会搜索" Park "或" 噪声噪声Park " (其中任何一个都会返回结果):