CM开发日志 - 搜索引擎(三)

到了这篇博文,对于solr的整个生命周期,希望各位要有个初步的认识(以便能抓住整个系列文章的脉络)。

我用自己的话总结为以下: solr 多核创建 -> 索引的预处理 ->
索引的创建和持久化
-> 索引的调用(Search API与索引文件的交互)

不对的地方希望大家指正。另外,最近在查一些关于Solr里面比较深入具体的资料的时候,发现网上的很多资料要么是简单的相互拷贝,要么就是英文资料。总是感觉不那么得心应手之余,有些东西自己还是得去看solr wiki或者查看源代码。也希望自己的一点小小的研究,能给学习应用solr,lucene或者WCS的朋友们一点小小的参考。另外,对互联网和电子商务比较感兴趣的朋友也能对电子商务网站的开发过程有个大致的了解。

回到正文,上篇博文介绍了基于WCS的Solr 多核的创建。创建solr多核的Utility执行全过程不用太过关注,毕竟是框架封装的一套逻辑,透过现象看本质才是重中之重!我觉得solr 多核的重点还是概念的理解:即根据你的网站系统后台数据的类型和特点,来创建出合适的solr核。

例如在WCS的网站系统里,后台有各种各样繁杂的数据,但是我们能够根据数据的应用场景来划分他们:

- 是属于商品、用户、订单、库存等本身的数据,我们叫实体数据,这个大类又可以分为两个小类

- 属于实体本身的,比如咖啡机有名称,生产厂商,性能,价格等,这些叫structured数据

- 属于实体附加的,还是拿咖啡机举例,咖啡机附加的有产品使用手册,保单信息等,这些叫unstructured数据

- 用于分类目的的我们叫分类数据

综上,我们把WCS后台繁杂的数据大体上分为了3类,即structured 实体数据unstructured实体数据 以及分类数据

以上是再次对solr多核的总结,下面进入下一环:索引预处理

索引预处理

首先,对于原生态的solr,他支持将数据通过xml,csv,json等形式写进solr 内存。这些数据可以有100条,如果你的内存够大,可以是1000条甚至更多。但是,更多的应用场景是通过配置文件直接读取数据库建立索引。读取数据库并创建临时表的过程,这就是索引的预处理。

我们首先理解一下什么是索引,然后就自然明白什么是索引的预处理了。

索引,我的理解就是:

1. 首先他是文件(一个或多个)

2. 这些文件相当于数据库表,只是索引的字段叫域(field),根据数据库表字段映射相应的域(field)。

3. 对应好了之后,索引文件就像一个数据库表一样:他只有一个主键,有很多字段。我们能够只通过这个主键来查找到我们想要的信息,于是免去了左外连接一个个查数据库表的过程。

举个例子,我们的网站商品有品牌信息,品牌信息表又跟商品主表有外键的关联。

那么为了创建关于品牌的索引,我们首先要有一张临时表TI_BRANDS,里面定义了我们需要索引的信息,比如商品ID,名称,名称首字母等。

其次,我们得把自己需要索引的数据库字段整理出来(通过left join 主表的方式),这样我们就拥有了我们需要的字段信息,并且将其全部存于临时表TI_BRANDS里面。

在WCS里面,创建TI临时表的过程就叫做索引预处理。

另附WCS索引预处理配置文件wc-dataimport-preprocess-brands.xml

<?xml version="1.0" encoding="UTF-8"?>

<_config:DIHPreProcessConfig xmlns:_config="http://www.ibm.com/xmlns/prod/commerce/foundation/config" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.ibm.com/xmlns/prod/commerce/foundation/config ../../xsd/wc-dataimport-preprocess.xsd ">
  <!-- get catalog ids for catentry -->
  <_config:data-processing-config processor="com.ibm.commerce.foundation.dataimport.preprocess.BootsStaticBrandsDataPreProcessor" batchSize="500">
	<_config:table definition="CREATE TABLE TI_BRANDS(
		BDC_BRAND_ID NUMBER,
		BDC_BRAND_NAME VARCHAR2(255 BYTE),
		BRAND_NAME_FIRST_CHAR VARCHAR2(255 BYTE),
		PREMIUM_BRAND_FLAG VARCHAR2(255 BYTE),
		BRAND_TREATMENT_FLAG VARCHAR2(255 BYTE),
		DISPLAY_FLAG VARCHAR2(255 BYTE),
		BRAND_ROOM_URL VARCHAR2(255 BYTE),
		BRAND_TREATMENT_URL VARCHAR2(255 BYTE),
		PRIMARY KEY (BDC_BRAND_ID)
	)" name="TI_BRANDS"/>

	<_config:query sql="
	select t.brandId AS brandId, t.brandName AS brandName,
	tib.BRAND_NAME_FIRST_CHAR AS brandNameFirstChar,
	tib.PREMIUM_BRAND_FLAG AS premiumBrandFlag,
	tib.BRAND_TREATMENT_FLAG AS brandTreatmentFlag,
	tib.DISPLAY_FLAG AS displayFlag,
	tib.BRAND_ROOM_URL AS brandRoomUrl,
	tib.BRAND_TREATMENT_URL AS brandTreatmentUrl from
	(select br.brand_id AS brandId, br.brand_name AS brandName from BDCBRAND br) t
	left join TI_BRANDS tib on (t.brandId = tib.BDC_BRAND_ID)
	"/>

    <_config:mapping>
      <_config:key queryColumn="brandId" tableColumn="BDC_BRAND_ID"/>
      <_config:column-mapping>
        <_config:column-column-mapping>
			<_config:column-column queryColumn="brandName" tableColumn="BDC_BRAND_NAME" />
			<_config:column-column queryColumn="brandNameFirstChar" tableColumn="BRAND_NAME_FIRST_CHAR" />
			<_config:column-column queryColumn="premiumBrandFlag" tableColumn="PREMIUM_BRAND_FLAG" />
			<_config:column-column queryColumn="brandTreatmentFlag" tableColumn="BRAND_TREATMENT_FLAG" />
			<_config:column-column queryColumn="displayFlag" tableColumn="DISPLAY_FLAG" />
			<_config:column-column queryColumn="brandRoomUrl" tableColumn="BRAND_ROOM_URL" />
			<_config:column-column queryColumn="brandTreatmentUrl" tableColumn="BRAND_TREATMENT_URL" />
        </_config:column-column-mapping>
        </_config:column-mapping>
    </_config:mapping>
  </_config:data-processing-config>
</_config:DIHPreProcessConfig>
时间: 2024-11-05 16:10:33

CM开发日志 - 搜索引擎(三)的相关文章

CM开发日志 - 搜索引擎(一)

IBM WebSphere Commerce使用了Apache Solr Search做为搜索引擎解决方案,提供了全方位的封装,主要体现在如下方面: Solr多核的创建 DIH (Data Import Handle) 处理的preprocess & indexbuild 由Search REST Service提供的很方便的针对索引文件的查询 这三个方面也是贯穿solr搜索的整个生命周期的. 介绍:开发环境 目前我使用的WCS版本是WebSphere Commerce Version 7 -

CM开发日志 - 搜索引擎(二)

Solr多核(MultiCore)的概念 想象一下,如果在你的应用里,如果你的索引要区分Catalog,多语言和索引类型,这样的话,一个Search应用对应一个Solr实例是远远不够的,这样就引入了Solr多核(MultiCore)的概念.Solr多核就是在一个search 应用里面创建多个实例,然后给实例分别创建文件系统. Solr多核的创建 WebSphere Commerce本地开发环境里面定义了一个基础的搜索组件(V:\IBM\WCDE_INT70\components\foundati

【Lolttery】项目开发日志 - (三)维护好一个项目好难

项目的各种配置开始出现混乱的现象了 在只有一个人开发的情况下也开始感受到维护一个项目的难度. 之前明明还好用的东西,转眼就各种莫名其妙的报错,完全不知道为什么. 今天一天的工作基本上就是整理各种配置. 再加上之前数据库设计出现了问题,要增加一个表,改几个名字,删几个字段……真是头大 1.gradle排除依赖 在打war包的时候出现了spring-boot与dubbo框架自带的spring2.5.6冲突的情况,于是学会了这么一招: //仅在本地执行时使用,不添加到war providedRunti

CM开发日志(四) - Solr 反向索引

什么是反向索引?(很多文章也称为倒排索引) 索引技术主要有以下3种: 反向索引,后缀数组和签名文件.其中, 反向索引技术在当前大多数的信息检索系统中得到了广泛的应用, 它对于关键词的搜索非常有效, 在lucene中也是使用的这种技术.后缀数组技术在短语查询中具有很快的速度, 但是这样的数据结构在构造和维护时都比较复杂一些.签名文件技术在20世纪80年代比较流行, 但是后来反向索引技术逐渐超越了它. 反向索引是目前搜索引擎公司对搜索引擎最常用的存储方式, 也是搜索引擎的核心内容, 反向索引源于实际

Python全栈开发【基础三】

Python全栈开发[基础三]  本节内容: 函数(全局与局部变量) 递归 函数 一.定义和使用 函数最重要的是减少代码的重用性和增强代码可读性 1 def 函数名(参数): 2 3 ... 4 函数体 5 ... 6 返回值 函数的定义主要有如下要点: def:表示函数的关键字 函数名:函数的名称,日后根据函数名调用函数 函数体:函数中进行一系列的逻辑计算 参数:为函数体提供数据 返回值:当函数执行完毕后,可以给调用者返回数据. 总结使用函数的好处: 1.减少代码重用 2.保持一致性,易维护

8、Cocos2dx 3.0游戏开发找小三之3.0版本的内存管理

重开发者的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/27693365 复杂的内存管理 移动设备上的硬件资源十分有限,内存尤为宝贵,开发者必须十分慎重地利用内存,避免不必要的消耗,更要防止内存泄漏. 基于 Cocos2d-iPhone 的 Objective-C风格的内存管理是 Cocos2d-x 的一个特色. 把 Objective-C 的内存管理方式引入 C++,使得游戏开发的内存管理难度下降了个层次.

常规功能和模块自定义系统 (cfcmms)—029开发日志(创建ManyToMany的column4)

029开发日志(创建ManyToMany的column4) 根据以上几节的准备,在这一节中可以加入ManyToManyColumn.js了.先来看看做好的样子如下图: 单击文字链接可以显示该条记录的情况.按下删除按钮则会显示一个提示窗口,询问是否删除此项. 下面即为ManyToManyColumn.js的代码. /** * * ManyToMany记录的管理,将根据权限设置来显示修改或删除按钮 * * 蒋锋 2015.12.31 * */ Ext .define( 'app.module.wid

仿酷狗音乐播放器开发日志二十一 开发动态调色板控件(附源代码)

转载请说明原出处,谢谢~~ 上一篇仿酷狗日志结束后,整个换肤功能就仅仅剩下调色板功能没有做了.我本以为会非常easy.可是研究了酷狗的调色板功能后发现不是那么简单的事情.首先看一下酷狗的调色板的样子: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemh1aG9uZ3NodQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" > waterm

《GZFramework框架开发日志》 前言 软件及插件清单

一.环境清单        VS2013        SQL2005        第三方插件:Devexpress v13.2        两个Nuget包:GZFramework.DB 和 GZFramework.WinLibrary 二.开发环境:.NET 4.0   三.下载地址           VS2013           SQL2005            第三方插件:Devexpress v13.2   四.框架最终效果图        框架开发日志系列把框架从无到有