做了几个Oracle Endeca 电商项目。每个项目都会有搜过关键字拼写错误更正(Spelling Correction)的需求。淘宝也有类似功能。

Oracle Endeca Sever提供了关键字拼写更正的功能。项目开发中一般只需要用这个Endeca预置功能,必要时做些调整就可。但是一直很好奇Endeca怎么知道用户拼写错了,怎么知道应该将用户输入的关键字更正为什么。闲来无事,查阅了一些资料。整理如下:

Endeca Server为关键字更正提供了两种方式:

1. 自动更正 (Auto Spelling Correction): 当用户输入的关键字在系统字典文件(dictionary file)里不存在时,系统直接将用户输入的关键字替换成系统认为用户真正想输入的关键字,然后用替换后的关键字去搜索,并显示搜索结果。 一般UI如下。

2. 拼写建议 (Explicit Spelling Suggestion): 当用户输入的关键字只能匹配到极少的结果, 如6个以下 (数量可配置),系统向用户展示搜索结果的同时从字典文件里找出匹配结果更多且和用户输入的关键字相似的关键字,并询问用户是否想切换成系统建议的关键字。如用户输入Cannon, 有3条结果,但是 Canon有几百上千条结果。系统就会向用户展示和Cannon匹配的3条结果,并且提示 Did you mean  Canon? 用户点击 Canon  即可用 Canon 发起另一个搜索。

问题一: 系统字典文件是关键字建议的来源。字典文件是怎么来的呢?

字典文件里的所有单词来源于数据中所有可搜索的属性值。默认情况下,Endeca 将所有的可搜索的属性值加入字典文件。例如,数据里有300条商品。商量的可搜索属性为商品名称、颜色和描述。Endeca 就会将这300条商品中所有的商品名称、颜色和描述中含有的单词加到一个文件里,形成了字典文件。

但是当数据量很大时,字典文件就会很大,从而影响系统性能。于是Endeca提供了一个界面可以让用户配置哪些单词可以加到字典文件。从下减小字典文字的大小。配置界面如下图。

it occurs at least n times: 单词在数据源里出现过n次以上,才能被加入字典文件。商量名里有Kodar, 那Kodar在所有的商品可搜索属性里出现过5(n)次 以上才能被编入字典文件。

and is between n1 and n2 characters long: 单词长度在n1 - n2 个字符以内才能被编入字典文件。

问题二:Endeca 根据什么逻辑挑选字典文件里的单词呢?比如用户输入Kodaaar, 字典文件里有Kodar1, Kodar2, Kodar3, 那Endeca应该将Kodaaar替换成Kodar1 还是Kodar2或Kodar3呢?

暂时无解。欢迎各路大神留言指点。

参考资料:

https://docs.oracle.com/cd/E40518_01/server.761/es_dev/src/cdg_spelldym_about.html

https://docs.oracle.com/cd/E29584_01/webhelp/mdex_advDev/src/tadv_spelldym_configuring_in_devstudio.html

搜索关键字自动更正 - Oracle Endeca Server的更多相关文章

  1. jQuery的搜索关键词自动匹配插件

    相信许多人都会用过搜索栏自动匹配关键词的功能,无论是像google的专业搜索引擎,还是普通的网站,现在许多都用上了这种关键词匹配技术,本文介绍的用jQuery实现的关键词匹配技术,当然要整合到自己的系 ...

  2. 在 Angular 中实现搜索关键字高亮

    在 Angular 中,我们不应该试图直接修改 DOM 的内容,当需要更新 DOM 内容的时候,应该修改的其实是我们的数据模型,也就是 $scope 中的数据,Angular 会帮助我们将修改之后的数 ...

  3. Oracle Dedicated server 和 Shared server(专用模式 和 共享模式) 说明(转)

    一.  官网说明 在DBCA 建库的时候,有提示让我们选择连接类型,这里有两种类型:专用服务器模式和共享服务器模式.默认使用专用模式.如下图: Oracle 官方文档对这两种文档的说明如下: Abou ...

  4. jQuery搜索框自动补全功能插件实现-autocomplete.js

    最近用nodeclub实现股票的输入关键字自动补全股票信息进行搜索功能,原先用jQuery-ui,结果jQuery-ui库太大,所以考虑用其他插件,最终选择使用autocomplete.js,控件简单 ...

  5. Oracle WebLogic Server 12c 新特性

    美国时间2011年 12月9日,Oracle公司正式发布WebLogic 12c版本,c是cloud的缩写.截止当前(2013年8月)最新版本为Oracle WebLogic Server 12c ( ...

  6. Django项目:CRM(客户关系管理系统)--26--18PerfectCRM实现King_admin搜索关键字

    search_fields = ('name','qq',) 登陆密码设置参考 http://www.cnblogs.com/ujq3/p/8553784.html search_fields = ( ...

  7. Oracle Database Server 'TNS Listener'远程数据投毒漏洞(CVE-2012-1675)解决

    环境:Windows 2008 R2 + Oracle 10.2.0.3 应用最新bundle patch后,扫描依然报出漏洞 Oracle Database Server 'TNS Listener ...

  8. Linux下通过脚本自动备份Oracle数据库并删除指定天数前的备份

    说明: Oracle数据库服务器操作系统:CentOSIP:192.168.0.198端口:1521SID:orclOracle数据库版本:Oracle11gR2 具体操作: 1.root用户登录服务 ...

  9. Excel 自动更正

    当有复杂的字段需要重复填写怎么办呢,比如××银行卡号,××电话号码,××公司地址等.可以使用excel的"自动更正"功能解决. 1. Excel 2010的自动更正选项在哪里呢 2 ...

随机推荐

  1. Spring 小知识点

    一.引入配置文件的方式: 方式一: <context:property-placeholder location="classpath:jdbc.properties,classpat ...

  2. PHP 修改目录下所有与文件夹重名的前缀文件为index.后缀

    <?phpset_time_limit(0); function traverse($path = '.' , $dir_name='') { $current_dir = opendir($p ...

  3. Architecture of a Java Compiler

    Architectural Overview   A modern optimizing compiler can be logically divided into four parts:   Th ...

  4. mongodb 错误 SCRAM-SHA-1 authentication failed for --转

    log 日志错误信息 2018-10-24T16:14:42.244+0800 I NETWORK [initandlisten] connection accepted from 192.168.1 ...

  5. ANTLR4权威指南 - 第7章 通过特定应用程序代码解耦语法

    第7章 通过特定应用程序代码解耦语法 到目前为止,我们已经知道了怎么用ANTLR的语法来定义语言了,接下来我们要给我们的语法注入一些新的元素了.就语法本身而言,其用处并不大,因为它只能告诉我们一个用户 ...

  6. Node.js之Express二

    好久没写了,今天看博客,觉得有必要把node.js继续写完,善始善终.原本想着把小崔课堂继续讲下去,由于其他原因也就此耽搁下来,看看以后还有没有机会吧.废话不扯,123开始. 一.Exoress之Re ...

  7. Firebird shadow

    火鸟数据库的shadow,即实时镜像. 主库发生变化,shadow也跟随变化,防止任何意外造成主库损坏无法使用,当然shadow可以有多个. 1.创建shadow的准备:修改Firebird.conf ...

  8. [转]Gridview实现多列排序,并显示图标

    本文转自:http://blog.csdn.net/gmjinrong/article/details/4516301 GridView实现支持多列排序,并显示升.降序图标上网找了很多资料参考才解决了 ...

  9. Dev中控件的js事件代码放在form标签中存在问题

    Dev中控件的js事件代码放在form标签中会获取不到(head标签中有其他js代码,未验证是否是这个问题)

  10. Oracle11g密码过期处理方法

    首先 查询密码有效期:   SELECT * FROM dba_profiles s WHERE s.profile='DEFAULT' AND resource_name='PASSWORD_LIF ...