gpt4 book ai didi

sql - sys.dm_fts_parser sql全文

转载 作者:行者123 更新时间:2023-12-02 12:30:01 24 4
gpt4 key购买 nike

我们很难找出提供给 sys.dm_fts_parser 的两个相似字符串给出不同的结果

select * from sys.dm_fts_parser('"0 CAD"', 0, null, 0) 

似乎认为“0 CAD”是 1 个 token (返回 2 个 token )

select * from sys.dm_fts_parser('"0 cad"', 0, null, 0) 

返回 3 个 token - 正确

更重要且更令人困惑的是原因

从包含(*,"point 5 CAD")的表中选择*并且从表中选择*,其中 contains(*,"point 5 cad") 失败

其中搜索的列包含“point 5 CAD”-

全文索引构建器不应该根据索引设置忽略干扰词(例如“5”)或包含它。
我们已经尝试了这两种方法,但无法解释为什么“nnnn CAD”很特别

请注意,根据http://msdn.microsoft.com/en-us/library/ms142583.aspx,全文应该不区分大小写。

我错过了什么?

编辑:使用 SQL 2012 11.0.2218

最佳答案

我的团队也遇到了这种奇怪的标记化行为。我们的解决方法是将 LOWER 应用于查询和搜索文本。

作为 Haroon previously identified ,问题似乎是由标记器识别与数字接近的某些大写货币代码并以不同方式对待它们引起的。以下查询说明了这一点:

SELECT * FROM sys.dm_fts_parser ('"syp 123"', 1033, 0, 0) -- Works fine
SELECT * FROM sys.dm_fts_parser ('"SYP 123"', 1033, 0, 0) -- Doesn't work

我们编写了一个脚本,用于识别表现出此行为的所有 1-4 个字母字符组合:

DECLARE @CurrencyCodes TABLE (CurrencyCode varchar(4), TokenCount int)
DECLARE @Start int = 65 -- A
DECLARE @End int = 90 -- Z

DECLARE @A int, @B int, @C int, @D int

SET @A = @Start
WHILE NOT (@A > @End) BEGIN
INSERT INTO @CurrencyCodes VALUES (CHAR(@A), NULL)
SET @B = @Start
WHILE NOT (@B > @End) BEGIN
INSERT INTO @CurrencyCodes VALUES (CHAR(@A) + CHAR(@B), NULL)
SET @C = @Start
WHILE NOT (@C > @End) BEGIN
INSERT INTO @CurrencyCodes VALUES (CHAR(@A) + CHAR(@B) + CHAR(@C), NULL)
SET @D = @Start
WHILE NOT (@D > @End) BEGIN
INSERT INTO @CurrencyCodes VALUES (CHAR(@A) + CHAR(@B) + CHAR(@C) + CHAR(@D), NULL)
SET @D = @D + 1
END
SET @C = @C + 1
END
SET @B = @B + 1
END
SET @A = @A + 1
END

UPDATE @CurrencyCodes SET TokenCount = (SELECT COUNT(1) FROM sys.dm_fts_parser ('"' + CurrencyCode + '123,456"', 1033, 0, 0))

SELECT CurrencyCode FROM @CurrencyCodes WHERE TokenCount = 2

从该查询中,我们发现以下 273 个代码中的任何一个都会出现问题:

ADF ADP AED AFA AFN ALK ALL AMD ANG AOA AON AOR ARA ARL ARM ARP ARS ATS AUD AWG AZM AZN BAM BBD BDT BEC BEF BEL BGJ BGK BGL BGN BHD BIF BMD BND BOB BOP BOV BRB BRC BRE BRL BRN BRR BRZ BSD BTN BWP BYR BZD CAD CDF CFP CHE CHF CHW CLF CLP CNX CNY COP COU CRC CSD CSJ CSK CUP CVE CYP CZK DDM DEM DJF DKK DM DOP DZD ECS ECV EEK EGP EQE ERN ESA ESB ESP ETB EUR EURO FF FIM FJD FKP FRF GBP GEL GHC GHS GIP GMD GNE GNF GRD GTQ GWP GYD HKD HNL HRK HTG HUF IDR IEP ILP ILR ILS INR IQD IRR ISJ ISK ITL JMD JOD JPY KES KGS KHR KMF KPW KRW KWD KYD KZT LAJ LAK LBP LKR LRD LSL LTL LUF LVL LYD MAD MAF MCF MDL MGA MGF MKD MKN MMK MNT MOP MRO MTL MUR MVQ MVR MWK MXN MXP MXV MYR MZM MZN NAD NGN NIO NLG NOK NPR NZD OMR PAB PEH PEI PEN PGK PHP PKR PLN PLZ PTE PYG QAR ROL RON RSD RUB RUR RWF SAR SBD SCR SDD SDG SEK SGD SHP SIT SKK SLL SML SOS SRD SRG STD SUR SVC SYP SZL THB TJR TJS TMM TND TOP TPE TRL TRY TTD TWD TZS UAH UAK UGS UGX USD USN USS UYI UYN UYU UZS VAL VEB VEF VNC VND VUV WST XAF XAG XAU XBA XBB XBC XBD XCD XDR XEC XEU XFO XFU XOF XPD XPF XPT XTS YDD YER YUD YUM ZAL ZAR ZMK ZRN ZRZ ZWC ZWD

关于sql - sys.dm_fts_parser sql全文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16909669/

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