solr入门之参考淘宝搜索提示功能优化拼音加汉字搜索功能
2017-02-08 17:19
417 查看
http://blog.csdn.net/sqh201030412/article/details/51211551
首先看一下从淘宝输入搜索关键字获取到的一些数据信息:
第一张:使用拼音的全程来查询
可以看到提示的是匹配的转换的拼音的方式,看最后一个提示项
这里还有一个在指定分类目录下搜索的功能,难道后台还存储的类目的信息?
还有一个标签的信息要存储
![](https://oscdn.geek-share.com/Uploads/Images/Content/201702/b9f79b9a7e1387e2ee11eb1563682857)
第二使用首字母来匹配 这里看不出来 淘宝的东西太多了,首字母直接有了对应的全程
![](https://oscdn.geek-share.com/Uploads/Images/Content/201702/318c2a15c3abc8d657edbc15acac9e23)
第三使用切断字母的匹配 看的出来 走的还是完全匹配的路径
![](https://oscdn.geek-share.com/Uploads/Images/Content/201702/37fa58cc6294243f58fcc5b1bebde3ee)
第四使用汉字匹配的方法 : 这个没得说的 这是主功能了
![](https://oscdn.geek-share.com/Uploads/Images/Content/201702/840d8fe9b8f751aa31c2f18d7e0209ac)
第五使用 拼音加汉字的方式: 能够匹配到 使用全部的拼音时 这里能看出来是使用了转换的方法了
先将汉字转为拼音 在去匹配
![](https://oscdn.geek-share.com/Uploads/Images/Content/201702/10f4028a13d0865c49262303329a38bc)
第六 这里使用部分 这个没啥问题 转成拼音后 shouta*
![](https://oscdn.geek-share.com/Uploads/Images/Content/201702/fb562a22c1839ac1782378484d4be68d)
第七 这里应该是先转成拼音 为 stao 看下面一张图搜索结果是吻合的,但是结果太少了,
这里淘宝因该使用了另外的搜索机制了.如果这种方法搜索到的数量不够,那么就使用查询模式
即 再放一个分词的字段用来查询, 我想是分成一个一个的模式 也就是搜索 s 套了
这里不需要考虑顺序了 词中含有这两个就可以了 就是下面的结果了
![](https://oscdn.geek-share.com/Uploads/Images/Content/201702/fb1b75940916684f517d5cbf0377f1dd)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201702/86252a32bb36f85dbe3ab87976287a74)
这里和上面说的是一个道理 从这里 大家应按能猜出来 搜索shtao是没有结果的,可以验证下 如果有兴趣
![](https://oscdn.geek-share.com/Uploads/Images/Content/201702/b7381cbddc956507db18f814aa5d3214)
这里看到没有提示结果,就是没有了
按照猜测出来的两种搜索方式
![](https://oscdn.geek-share.com/Uploads/Images/Content/201702/c670d15eb5f98944c8f64f79b8ba9b87)
淘宝处理
对于拼音加汉字问题 应该是使用了双重查询 ,保证汉字是正确匹配的(应该使用的是当个分词字段)
然后再进行汉字转为拼音后的过滤,
学到一点解决拼音加汉字搜索建议的解决方法
新添加一个字段使用完全分词模式即 分成一个 一个 用来做汉字匹配过滤查询
然后再用汉字转拼音查询 当数量不够时再使用一次检索查询 含有关键字即可 不要求位置在首位
下面是自己的搜索建议改造拼音加汉字的改写
1.添加一个汉字单个分词的字段
schema.xml中配置
<fieldtype name="ng1_1" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<tokenizer class="solr.NGramTokenizerFactory" minGramSize="1" maxGramSize="1"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldtype>
<!-- 单个分词 保证汉字正确性-->
<field name="word_n1" type="ng1_1" indexed="true" stored="false"/>
<copyField source="word" dest="word_n1"/>
2.代码中添加过滤部分
//这里添加过滤--要包含的汉字--使用filter增加查询速度
if(StringFilterUtils.filterAll(q)!=null && StringFilterUtils.filterAll(q).trim().length()>0){
query.set(CommonParams.FQ, BaseSuggestIndex.Fd.word_n1.name()+":"+StringFilterUtils.filterAll(q).trim());
}
对比搜索条件
![](https://oscdn.geek-share.com/Uploads/Images/Content/201702/8775878226d82d8275e04e96b6e93668)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201702/117c94e45e93caa93c5b6bbcd13173bb)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201702/f5207026d9e7d47d94c21e9e4c90ec0f)
未优化前
![](https://oscdn.geek-share.com/Uploads/Images/Content/201702/8a0d33fb1e87afd5a50b65dfdf0159a4)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201702/f254edfdfae193e540f0640c2f42ce10)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201702/8f038236da2f7fa8ce73975c14744555)
优化后
![](https://oscdn.geek-share.com/Uploads/Images/Content/201702/bb26810078b0c37cb0035657dc40b97a)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201702/d1475d1d3c3f6baebb3a0a8b1bed27df)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201702/7e53ffca3ee58c562218f9d2fe891bb5)
可以发现汉字输入不正确,就不能出来提示了 下面是一些输入正确的出来的结果
![](https://oscdn.geek-share.com/Uploads/Images/Content/201702/9dbc8019f21e985d8b6179bd571bc652)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201702/a0c7cb0ca1ab1e6b042fde2bfe387a94)
首先看一下从淘宝输入搜索关键字获取到的一些数据信息:
第一张:使用拼音的全程来查询
可以看到提示的是匹配的转换的拼音的方式,看最后一个提示项
这里还有一个在指定分类目录下搜索的功能,难道后台还存储的类目的信息?
还有一个标签的信息要存储
第二使用首字母来匹配 这里看不出来 淘宝的东西太多了,首字母直接有了对应的全程
第三使用切断字母的匹配 看的出来 走的还是完全匹配的路径
第四使用汉字匹配的方法 : 这个没得说的 这是主功能了
第五使用 拼音加汉字的方式: 能够匹配到 使用全部的拼音时 这里能看出来是使用了转换的方法了
先将汉字转为拼音 在去匹配
第六 这里使用部分 这个没啥问题 转成拼音后 shouta*
第七 这里应该是先转成拼音 为 stao 看下面一张图搜索结果是吻合的,但是结果太少了,
这里淘宝因该使用了另外的搜索机制了.如果这种方法搜索到的数量不够,那么就使用查询模式
即 再放一个分词的字段用来查询, 我想是分成一个一个的模式 也就是搜索 s 套了
这里不需要考虑顺序了 词中含有这两个就可以了 就是下面的结果了
这里和上面说的是一个道理 从这里 大家应按能猜出来 搜索shtao是没有结果的,可以验证下 如果有兴趣
这里看到没有提示结果,就是没有了
按照猜测出来的两种搜索方式
淘宝处理
对于拼音加汉字问题 应该是使用了双重查询 ,保证汉字是正确匹配的(应该使用的是当个分词字段)
然后再进行汉字转为拼音后的过滤,
学到一点解决拼音加汉字搜索建议的解决方法
新添加一个字段使用完全分词模式即 分成一个 一个 用来做汉字匹配过滤查询
然后再用汉字转拼音查询 当数量不够时再使用一次检索查询 含有关键字即可 不要求位置在首位
下面是自己的搜索建议改造拼音加汉字的改写
1.添加一个汉字单个分词的字段
schema.xml中配置
<fieldtype name="ng1_1" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<tokenizer class="solr.NGramTokenizerFactory" minGramSize="1" maxGramSize="1"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldtype>
<!-- 单个分词 保证汉字正确性-->
<field name="word_n1" type="ng1_1" indexed="true" stored="false"/>
<copyField source="word" dest="word_n1"/>
2.代码中添加过滤部分
//这里添加过滤--要包含的汉字--使用filter增加查询速度
if(StringFilterUtils.filterAll(q)!=null && StringFilterUtils.filterAll(q).trim().length()>0){
query.set(CommonParams.FQ, BaseSuggestIndex.Fd.word_n1.name()+":"+StringFilterUtils.filterAll(q).trim());
}
对比搜索条件
未优化前
优化后
可以发现汉字输入不正确,就不能出来提示了 下面是一些输入正确的出来的结果
相关文章推荐
- solr入门之参考淘宝搜索提示功能优化拼音加汉字搜索功能
- solr入门之參考淘宝搜索提示功能优化拼音加汉字搜索功能
- solr入门之拼音加汉字方式的搜索建议自动补全的不高效实现
- solr入门之搜索建议的具体查询及拼音加汉字搜索建议的思考
- Android 利用AutoCompleteTextView实现模糊搜索功能,搜索结果自动提示,识别拼音首字母并转汉字提示
- solr入门之拼音加汉字方式的搜索建议自动补全的不高效实现
- Android 实现ListView的A-Z字母排序和过滤搜索功能,实现汉字转成拼音
- Android 实现ListView的A-Z字母排序和过滤搜索功能,实现汉字转成拼音
- Android 实现ListView的A-Z字母排序和过滤搜索功能,实现汉字转成拼音 .
- Android 实现ListView的A-Z字母排序和过滤搜索功能,实现汉字转成拼音
- Android 实现ListView的A-Z字母排序和过滤搜索功能,实现汉字转成拼音
- Android 实现ListView的A-Z字母排序和过滤搜索功能,实现汉字转成拼音
- 自动补全+汉字拼音双查(6)---为搜索功能添加webservice
- Android 实现ListView的A-Z字母排序和过滤搜索功能,实现汉字转成拼音
- Android 实现ListView的A-Z字母排序和过滤搜索功能,实现汉字转成拼音
- Android 实现ListView的A-Z字母排序和过滤搜索功能,实现汉字转成拼音
- Android 实现ListView的A-Z字母排序和过滤搜索功能,实现汉字转成拼音
- Android实现ListView的A-Z字母排序和过滤搜索功能,实现汉字转成拼音
- Android实现ListView的A-Z字母排序和过滤搜索功能,实现汉字转成拼音
- Android 实现ListView的A-Z字母排序和过滤搜索功能,实现汉字转成拼音