问题标签 [containstable]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
sql-server - 构建 TSQL 全文搜索 XOR
我有一张包含以下文本数据的表格:
- 链接器被
- 链接器页面
- 页面
我正在使用一个CONTAINSTABLE
. 当我使用以下全文表达式时 "Linker*" AND "pagina*"
,仅返回第二条记录。
我尝试使用 expression 构建 XOR ("Linker*" OR "pagina*") AND NOT ( "pagina*" AND "Linker*")
,但返回所有记录。
为什么?
search - 如何改进“50 万”搜索的 CONTAINSTABLE 排名结果?
使用 CONTAINSTABLE 的加权项搜索产品尺寸...
...产生排名结果,其中“150 万”的产品排名高于“5 百万”的产品。
有没有办法让“5mil”匹配(带前导空格字符)排在“.5mil”匹配(带前导小数点)之前?
sql-server - Sql Server Containstable 用于在关键字内搜索
场景
我已经在 name 列中存储了关于每个产品的一些关键字Tags
。当用户搜索该列中存在的单词时,必须显示相关产品。用户可能会在搜索查询中输入一些通用词(例如:an,or,some),因此我目前根据通用性为每个词分配权重。
使用
标签列是全文索引,我Containstable
用于搜索关键字。
问题
现在几个月后,表格大小显着增加,我发现使用Containstable
. 当用户搜索一个词时(该词在相关行的所有标签列中出现的次数相同),结果行的排名不相等,并且每一行具有较小的关键字计数(从阈值小),得到一个更高的等级。
这不是问题,基于https://technet.microsoft.com/en-us/library/ms142524%28v=sql.105%29.aspx,ContainsTable
使用IndexedRowCount
和KeyRowCount
进行排名。
现在有没有办法仅根据标签列中出现的单词的加权总和对每一行进行排名?
更新
我需要Contains
功能加重量之类的东西。
基于https://msdn.microsoft.com/en-us/library/ms187787.aspx,weighted_term
不影响Contains
.
我的新代码没有ContainsTable
在下面。这段代码很慢!
sql-server - CONTAINSTABLE 如何与许多搜索词一起使用
例如,我有一张桌子Companies
。其中有一个字段FullName
,我在该字段上获得了全文索引。然后我CONTAINSTABLE
用1 到 10 个单词加入该表。@search_word
"company*" AND "name*" AND "oil*" AND "propan*" AND "liquid*"...
而且我知道单词(带有变体*
)得到了这个数量的匹配项:
- 公司 - 10k
- 名称 - 5k
- 油 - 2k
- 丙烷 - 1k
- 液体 - 500
- 以上 1 行中的所有单词 - 300 个匹配项
所以,如果我按这个顺序搜索:
@search = '"company*" AND "name*" AND "oil*" AND "propan*" AND "liquid*"'
并按此顺序:
@search = '"liquid*" AND "propan*" AND "oil*" AND "name*" AND "company*"'
我的查询速度会有什么不同吗?
sql - 值中包含的 SQL 全文搜索列
我们在“名称”上添加了全文搜索,以下查询运行良好:
select * from products where contains( name, 'milk')
但是我们找不到运行反向版本的方法:
select * from products where contains( 'milk', name)
有没有办法找到“牛奶”中包含的所有名称?
sql - 包含在搜索带有“n”的值时起作用的表查询
我对全文索引相当陌生,我的查询按预期工作,直到我使用包含“n”的短语进行搜索。
例子:
此查询不返回任何内容,但在同一个表上针对同一个短语的 LIKE 语句会返回。
'n' 字符对全文搜索有什么意义吗?有解决方法吗?
sql - SQL Server FREETEXTTABLE 不返回结果
我使用 SQL ServerFREETEXTTABLE
函数根据用户输入的单词(如搜索引擎)在表列中进行搜索,并返回最佳匹配行。
表格列将包含许多问题,用户将在文本框中输入一些内容(以任何顺序),并且根据他输入的内容,我需要自动填充搜索页面。
我已经习惯FREETEXTTABLE
了。但在某些情况下它不起作用。
如果我输入“what”,它不会返回任何内容。
但如果我输入“what is”,它会返回 10 条记录。
我也试过CONTAINS
和FREETEXT
。
甚至这个查询也返回了零行。
但是下面的查询返回了几行。
c# - 使用 Irony 和 C# 将搜索字符串转换为 SQL 全文索引查询
我有一个搜索框,用户可以在其中输入文本,当他们点击搜索时,他们输入的文本将在SQL CONTAINSTABLE
语句中使用。我需要解析字符串,使其具有适合CONTAINSTABLE
函数的格式,并且我找到了一个使用 Irony 的示例,它几乎完全符合我的需要。我在这里得到了 Irony 示例类:
这实际上是为 SQL CONTAINS 函数设计的,但两者之间的区别CONTAINSTABLE
现在对我来说不是问题。我做了一点修改,因为我不想要“屈折”行为,所以我将任何引用更改为“精确”。
我现在遇到的问题是我希望将搜索短语视为短语,而不是作为由AND
运算符分隔的关键字列表。例如,如果用户输入:“总经理”,那么我希望它以“总经理”的身份通过解析器,但它目前正在带回“总经理”和“经理”
我想我需要以某种方式修改构造函数,它正在构建所有表达式规则 - 但我什至不确定从哪里开始!
非常感谢任何帮助,谢谢。
sql-server - SQL Containstable 多列 - 哪一列包含结果
我收到了一个规范,可以根据结果所在的列向搜索结果添加相关性分数。例如,我有一个产品表,其中包含关键字、产品名称和品牌等字段。
我目前通过链接查找产品
现在这将找到带有搜索词的记录,但我需要按列对结果进行加权,例如。关键词得分 1,productNames 得分 2,brands 4,等等。然后我可以将得分的总和加在一起给出我的结果相关性。即,如果“Nike”在所有三列中,它将得分 7,仅在品牌 4 中,等等。
为了促进这一点,我需要知道哪些列包含可匹配的内容,但还没有找到任何详细信息。
我已经查看了 ISABOUT 选项,但这是为了在单个列中对多个搜索词进行加权。
目前我有一个案例陈述
哪个确实有效,但似乎非常浪费,因为 containstable 必须已经在做这项工作。
如果有人有任何想法,那么他们将不胜感激。
c# - 如何调试 TableValued SQL 函数
我有一个数据库,其中包含一个表值函数,用于实现 CONTAINSTABLE 查询。它看起来像这样:
这可以工作并已作为独立代码进行测试,并且在使用 t–sql select * from FreeTextSearch_Usage('keyword') 调用时也可以工作
但现在我试图从我的 C# 代码中调用它,其中数据库被声明(通过代码生成自动)为
因此,在我的代码中,我执行以下操作:
并且几乎无论我作为关键字传递什么,它都会引发异常,内部异常值为“全文查询字符串的全文查询参数无效”
因此,如果我传递“keyword”形式的字符串,如果传递“keywod”形式的字符串,则会出现异常,如果传递“'FORMSOF(INFLECTIONAL,'keyword')' " 如果我传递格式为 ""FORMSOF(INFLECTIONAL, 'keyword')"" 的字符串,我会得到一个异常。我得到一个异常
如何调试底层函数以找出传递给它的引发异常的内容?
或者,我在声明中做错了什么?