gpt4 book ai didi

sql - 是否可以在单个 CONTAINSTABLE 搜索条件中组合屈折搜索和邻近搜索?

转载 作者:行者123 更新时间:2023-12-02 02:28:52 27 4
gpt4 key购买 nike

我正在使用全文搜索在 AdventureWorks 数据库中游玩。在 production.ProductDescription 中,我试图搜索“mountain”和“replacements”。

我知道有一条记录,描述如下:

High-performance mountain replacement wheel.

我的第一次尝试是这样的:

SELECT 
pd.Description,
ct.RANK
FROM Production.ProductDescription AS pd
INNER JOIN CONTAINSTABLE(
Production.ProductDescription,
Description,
'mountain NEAR replacements'
) AS ct ON pd.ProductDescriptionID = ct.[KEY]
ORDER BY ct.RANK DESC;

这返回了 0 行。如果我将“mountain NEAR replacements”更改为“mountain NEAR replacements”,我会在结果数据集中得到我期望的记录。

我的下一次尝试是尝试如下操作:

SELECT 
pd.Description,
ct.RANK
FROM Production.ProductDescription AS pd
INNER JOIN CONTAINSTABLE(
Production.ProductDescription,
Description,
'FORMSOF(INFLECTIONAL, "replacements") NEAR "mountain"'
) AS ct ON pd.ProductDescriptionID = ct.[KEY]
ORDER BY ct.RANK DESC;

但这会产生错误

Syntax error near 'NEAR' in the full-text search condition 'FORMSOF(INFLECTIONAL, "replacements") NEAR "mountain"'.

我查看了 CONTAINSTABLE 的语法,结果发现在相同的搜索条件下不能有 generation_term(例如 FORMSOF())和邻近项(例如 NEAR)。

我在表中添加了以下记录:

Replacement parts for you omg gee-whiz mountain

该记录在以下 fts 查询中排名靠前 (96):

SELECT 
pd.Description,
ct.RANK
FROM Production.ProductDescription AS pd
INNER JOIN CONTAINSTABLE(
Production.ProductDescription,
Description,
'FORMSOF(INFLECTIONAL,"replacements") AND "mountain"'
) AS ct ON pd.ProductDescriptionID = ct.[KEY]
ORDER BY ct.RANK DESC;

但正如预期的那样,在此查询中排名较低 (32):

SELECT 
pd.Description,
ct.RANK
FROM Production.ProductDescription AS pd
INNER JOIN CONTAINSTABLE(
Production.ProductDescription,
Description,
'"replacement" NEAR "mountain"'
) AS ct ON pd.ProductDescriptionID = ct.[KEY]
ORDER BY ct.RANK DESC;

对于这个人为的例子,我希望用户能够提供搜索词 mountain 和 replacements,并让它返回具有相对较高排名的记录,这些记录包含彼此靠近的 replacement 和 mountain 但我不知所措如何到达那里。

最佳答案

你添加的最后一条记录“天哪,你的替换零件”

单词替换并没有真正靠近单词mountain,这就是排名很低的原因。

在 Adventureworks 示例中,您正在查看的产品描述实际上是非常短的字段,而不是 NEAR 运算符的真正目的。

在这种情况下我会使用

'FORMSOF(INFLECTIONAL, "replacement") AND FORMSOF(INFLECTIONAL, "mountain")' 

或者您的 CONTAINSTABLE 示例的变体。

SELECT  
pd.Description,
ct.RANK
FROM Production.ProductDescription AS pd
INNER JOIN CONTAINSTABLE(
Production.ProductDescription,
Description,
'FORMSOF(INFLECTIONAL,"replacements") AND FORMSOF(INFLECTIONAL,"mountain")'
) AS ct ON pd.ProductDescriptionID = ct.[KEY]
ORDER BY ct.RANK DESC;

有趣的是,你说的查询给你96排名,只给了我32排名。我正在使用 SQL Server 2005 进行测试,并使用默认值在 Product.ProductDescription.Description 上设置了全文索引。

很难说究竟是什么促成了更高的排名,因为这些非常相似的条目具有完全不同的排名:入门级骑手的替换山地轮。 - 96适合休闲到严肃骑手的替换山地轮。 - 48

关于sql - 是否可以在单个 CONTAINSTABLE 搜索条件中组合屈折搜索和邻近搜索?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4610089/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com