做了几个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. 一分钟让你学会使用Android AsyncTask

    AsyncTask相信大多数朋友对它的用法都已经非常熟悉,这里记录一下主要是献给那些刚刚接触的Android 或者AsyncTask的同学们,高手请绕道. AsyncTask类是Android1.5版 ...

  2. android学习-仿Wifi模块实现

    最近研究android内核-系统关键服务的启动解析,然而我也不知道研究wifi的作用,就当兴趣去做吧(其实是作业-_-) 系统原生WiFI功能大概有:启动WiFI服务,扫描WiFi信息(这个好像已经被 ...

  3. onsubmit解惑

    1.onsubmit的位置: onsubmit只存在于html <form>中,js的form中 2.submit与onsubmit的区别 发生顺序:onsubmit -> subm ...

  4. org.springframework.beans.NullValueInNestedPathException

    报错代码: HTTP Status 500 - An exception occurred processing JSP page /WEB-INF/views/input.jsp at line 2 ...

  5. NOI2018 退役记

    退役预订... upd 果然就这么不光荣的退役了... 我居然考出了一场只有两题得分的比赛,我好菜啊... 不过高三充(tui)实(fei)的生活应该很有意思... 大家一起加油吧!!!

  6. c# winform项目用到的部分知识点总结

    项目用到的知识点总结,欢迎大家吐槽: /// <summary> /// 转换非yyyy-MM-dd的字符串为DateTime类型 /// </summary> public ...

  7. Angular的第一个helloworld

    在安装了node,npm,angular-cli,vscode之后,我们来创建一个angular的应用 创建第一个hello world 使用的IDE工具为vscode 打开vscode,打开一个命令 ...

  8. node.js 读取文件

    一般用法 var path = require("path"); var fs = require("fs"); //let filePath = path.j ...

  9. [日常] nginx访问频率限制

    去年的事,随便记记 ========================================================================= 2017年3月15日 记录: n ...

  10. js中var与let

    问题 for (var iii = 0; iii < 3; iii++) { setTimeout(function(){ console.debug(iii) }, 1000) let let ...