做了几个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. puppet的使用:puppet的hello world

    这个例子完成将master节点上的一个文件放至agent节点上的功能 创建要传输的文件 echo "helloWorld" > /etc/puppet/modules/pup ...

  2. 搭建hadoop_之 创建3个虚拟机配置好网络

    (创建3个虚拟机,1个作为主服务器,二个作为从节点)   一.安装虚拟机 Windwos:VMware Workstation Pro MAC:VMware Fusion 安装:     ** 创建空 ...

  3. 【C#小知识】C#中一些易混淆概念总结(五)---------深入解析C#继承

    目录: [C#小知识]C#中一些易混淆概念总结--------数据类型存储位置,方法调用,out和ref参数的使用 [C#小知识]C#中一些易混淆概念总结(二)--------构造函数,this关键字 ...

  4. windows 64位 下 安装 tomcat

    tomcat 版本 windows 64位 .zip apache-tomcat-7.0.42.zip 注意: 1. 安装目录不得有 空格 或 中文字符 2. 然后,在系统环境变量下,新建一个变量: ...

  5. MYSQL 中的日期操作(不包含跨年问题)

    先从一个简单的SQL说起 当前week的第一天:select date_sub(curdate(),INTERVAL WEEKDAY(curdate()) + 1 DAY): DATE_SUB() 函 ...

  6. 机器学习中的范数规则化之L0、L1与L2范数

    今天看到一篇讲机器学习范数规则化的文章,讲得特别好,记录学习一下.原博客地址(http://blog.csdn.net/zouxy09). 今天我们聊聊机器学习中出现的非常频繁的问题:过拟合与规则化. ...

  7. Go url编码和字符转码

    类似php中的urlencode 和htmlspecialchars: package main import ( "fmt" "html" "net ...

  8. .Net Core全球化多语言

    参照:ASP.NET Core 全球化和本地化 步骤如下: 后台中的本地化. Startup.cs中注册服务并制定Resource文件的位置.注意:这里的位置不仅仅应用到Web层,如Infrastru ...

  9. 页面常见布局以及实现方法--flex

    页面布局是前端工程师的基本功之一,总结分析各种布局实现方法,可以让自己快速定位哪种方法实现功能,同时可以做到现最大程度的兼容. 一.水平居中 假设:最基本机构 .parent>.child 1. ...

  10. JavaScript 函数全局变量定义

    在 JavaScript 中, 作用域 影响着变量的作用范围.在函数外定义的变量具有 全局 作用域.这意味着,具有全局作用域的变量可以在代码的任何地方被调用. 没有使用var关键字定义的变量,会被自动 ...