垂直搜索

1.<ramBufferSizeMB>32</ramBufferSizeMB>。solrconfig中的这个配置,如果对于过于大型的应用,这个配置必须修改。这是建索引时的设置内存大小。

2.一个商品属于,类别---》子类别--》子子类别  ,想在所有类别中都能查询到该商品。

    做法:讲该商品的父子结果查询出来。需要新加入一个索引字段,并构建成   类别id-子类别id-子子类别id :例如 1-11-111

    默认的我们只知道,商品的直接信息中只能拿到它的最末级类别id。可以通过最末级类别信息,查询到商品。

    我们必须自定义solr类型。就像定义中文的分词类型一样,在schama.xml中文分词定义为用ik分词器。这里我们用 <tokenizer class="solr.WhitespaceTokenizerFactory"/>作为分词器。

1-11-111 将被自动分解为 1 11 111 这3个串,如果想进行solr查询,只需将该字段名称=1 就能查询到该商品,或者11也可以查到该商品。

如果一个商品属于多个类别怎么办呢?一样的啊。将多个类别下的1-11-111串合并在一起。

3。对于一个比较大型的应用,而且数据量很大的时候,建索引就不能一次建完了。得一部分一部分的查出来一部分一部分的建索引。比如1000w条数据。或者更大,我们可分为1w条这样查,查询完就建索引,这样循环1000次。

4。或者根据数据中最近更新的数据,查询的时候就只对有过更新的数据进行更新。

5.索引库的更新。索引库更新不能全用全量式更新,也不能全用增量式更新。

     5.1.只用全量式更新的弊端:在主索引服务器向从索引服务器分发的过程中,如果主索引服务器还未建索引,而从索引服务器又在向主索引服务器拿索引,那么就会出现大问题。就会导致系统,在几十分钟不能用。几率虽然很小但也有可能发生。是个不定时炸弹。

    5.2.只用增量更新,只用增量更新会出什么问题呢,如果数据库中删除了的数据,在索引库中还是会存在,而且有可能被用户查询出来。

    5.3.解决的方案是:增量更新和全量更新都用。增量更新保证每次更新数据都能加入索引库,在较短的时间段内执行,全量更新则用于将整个索引库删除再进行 建索引,全量更新必须在晚上某个时间段执行。如果不幸在晚上执行全量的时候出现那个很小的几率的问题,增量更新还会在这个较小的时间段内将索引建进去。并 分发到从索引服务器

posted @ 2013-04-23 16:13  Dream-Weaver  阅读(190)  评论(0编辑  收藏  举报