在具有 html 实体的字段中搜索
我们客户的数据 (SQL Server 2005) 中包含 html 实体 (é -> é)。
我们需要在这些字段内进行搜索,因此搜索“équipe”将找到“équipe”。
我们无法更改数据,因为我们客户的客户可以随意编辑这些字段(使用 HTML 编辑器),因此如果我们删除这些实体,在下次编辑时它们可能会重新出现,并且问题仍然存在。
我们不能使用 .net 服务器端函数,因为我们需要在行返回到服务器之前找到它们。
我会使用一个用 UTF-8 对应项替换实体的函数,但这有点烦人,而且我认为它严重降低了搜索性能(如果我没记错的话,与全表扫描有关)。
有什么想法吗?
谢谢
Our customer's data (SQL Server 2005) has html entities in it (é -> é).
We need to search inside those fields, so a search for "équipe" will find "équipe".
We can't change the data, because our customer's customers can edit those fields as will (with a HTML editor), so if we remove the entities, on the next edit they might reappear, and the problem will still be there.
We can't use a .net server-side function, because we need to find the rows before they are returned to the server.
I would use a function that replaces the entities by their UTF-8 counterparts, but it's kind of tiresome, and I think it seriously drops the search performances (something about full table scan if I recall correctly).
Any idea ?
Thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您只需要检查并编码传入的搜索词。
如果将“
équipe
”转换为“équipe
”并在 WHERE/FTS 子句中使用它,则仍然可以使用该字段上的任何索引,如果优化器认为这是合适的。You would only need to examine and encode the incoming search term.
If you convert "
équipe
" to "équipe
" and use that in your WHERE/FTS clause then any index on that field could still be used, if the optimizer deems it appropriate.