solr入门之參考淘宝搜索提示功能优化拼音加汉字搜索功能

Posted gccbuaa

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了solr入门之參考淘宝搜索提示功能优化拼音加汉字搜索功能相关的知识,希望对你有一定的参考价值。

首先看一下从淘宝输入搜索keyword获取到的一些数据信息:


第一张:使用拼音的全程来查询
能够看到提示的是匹配的转换的拼音的方式,看最后一个提示项
这里另一个在指定分类文件夹下搜索的功能,难道后台还存储的类目的信息?

另一个标签的信息要存储
技术分享
第二使用首字母来匹配 这里看不出来 淘宝的东西太多了,首字母直接有了相应的全程
技术分享

第三使用切断字母的匹配 看的出来 走的还是全然匹配的路径
技术分享


第四使用汉字匹配的方法 :  这个没得说的 这是主功能了
技术分享

第五使用 拼音加汉字的方式: 可以匹配到 使用所有的拼音时 这里能看出来是使用了转换的方法了
先将汉字转为拼音 在去匹配
技术分享
第六 这里使用部分  这个没啥问题 转成拼音后  shouta*
技术分享


第七 这里应该是先转成拼音 为 stao 看以下一张图搜索结果是吻合的,可是结果太少了,
这里淘宝因该使用了另外的搜索机制了.假设这样的方法搜索到的数量不够,那么就使用查询模式
即 再放一个分词的字段用来查询, 我想是分成一个一个的模式 也就是搜索 s 套了
这里不须要考虑顺序了 词中含有这两个就能够了 就是以下的结果了
技术分享
技术分享

这里和上面说的是一个道理 从这里 大家应按能猜出来 搜索shtao是没有结果的,能够验证下 假设有兴趣
技术分享
这里看到没有提示结果,就是没有了
依照推測出来的两种搜索方式
技术分享
淘宝处理
对于拼音加汉字问题 应该是使用了双重查询 ,保证汉字是正确匹配的(应该使用的是当个分词字段)
然后再进行汉字转为拼音后的过滤,


学到一点解决拼音加汉字搜索建议的解决方法
新加入一个字段使用全然分词模式即 分成一个 一个 用来做汉字匹配过滤查询
然后再用汉字转拼音查询  当数量不够时再使用一次检索查询 含有keyword就可以 不要求位置在首位

以下是自己的搜索建议改造拼音加汉字的改写
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入门之搜索建议的几种实现方式和最终选取实现思路

solr搜索分词优化

如何自动给汉字加拼音

基于前端javascript的搜索功能

如何在word中给汉字加拼音