依旧是毕设,做到最后一点了,之前因为进度的关系,搜索使用的是最恶心的like,现在刚好还有一点空余的时间,将其修改为lucene。
由于之前没有使用过lucene,所以果断把红薯的LuceneIndexUtil搞下来看了看,然后自己重新打了一遍,在打的时候顺便网上找了一些lucene的资料,所以敲了一遍之后有了一点感觉了。
我目前前台涉及到搜索的只有一个productInfo,而每一个商品都有一个productCategory,当时做项目的时候为了简化,将productCategory中设置了层次只有两层,由于用户可以通过搜索productName,类别名来查询商品,最开始的时候定义了一个LuceneTaskProductInfo的Java Bean,它里面存放pid,productName,catName,而productName和catName设索引。
我写了一个suggest的组件,当用户在输入框输入的内容发生改变之后,会异步请求后端,将以输入字符串开头的类别或商品名查询出来,最多七条。
当用户输入某一个商品名的几个字母的时候,suggest就会提示整个商品名称,用户选择对应商品,然后提交之后,搜索总是为空。
我当时郁闷了一把,为什么不行呢,开始以为是编码问题,后面发现其实是因为,lucene里面productName我设置的是index,它会进行分词,而我把productName直接传进去,即使是通过WildcardQuery也查询不到,所以后面就把suggest中返回商品名称的去掉了,单纯返回类别名了。
后面又想到用户可能输入一级类别的名称,所以果断LuceneTaskProductInfo中又添加了parentCatName,把它也设置为index。
再后面就是做了一个很简单的功能增强,把用户输入的串按照空格切开,然后再搜索。
貌似就这么多了,记录完成,收工!!