
对数据库中的数据建立倒排索引 1. 启动本机的mysql数据库 我新建test数据库,并在其中新建test表,表有两个字段,ID与Val。ID表示文档编号,Val表示文档内容,这是一个最简单的数据源。2. 在Solr中配置数据源 在\web...

solr如何建立索引
可以用API导入,用java的话有SOLRJ,其他的语言应该也有对应的lib

如何对solr建立的索引进行搜索
以下资料整理自网络,以及查看solr帮助文档。
主要分为两部分,第一部分是对《db-data-config.xml》的配置内容的讲解(属于高级内容),第二部分是DataImportHandler(属于基础),第三部分是对db-data-config.xml的进阶 第一部分是对《db-data-config.xml》 query是获取全部数据的SQL deltaImportQuery是获取增量数据时使用的SQL deltaQuery是获取pk的SQL parentDeltaQuery是获取父Entity的pk的SQL Full Import工作原理:
执行本Entity的Query,获取所有数据;
针对每个行数据Row,获取pk,组装子Entity的Query;
执行子Entity的Query,获取子Entity的数据。
Delta Import工作原理:
查找子Entity,直到没有为止;
执行Entity的deltaQuery,获取变化数据的pk;
合并子Entity parentDeltaQuery得到的pk;
针对每一个pk Row,组装父Entity的parentDeltaQuery;
执行parentDeltaQuery,获取父Entity的pk;
执行deltaImportQuery,获取自身的数据;
如果没有deltaImportQuery,就组装Query 限制:
子Entity的query必须引用父Entity的pk 子Entity的parentDeltaQuery必须引用自己的pk 子Entity的parentDeltaQuery必须返回父Entity的pk deltaImportQuery引用的必须是自己的pk 第二部分是DataImportHandler 关于DataImportHandler的具体使用方法,详见下文,如果你英文超级好,那看这个链接吧:
http:
/
/
wiki.apache.org/
solr/
DataImportHandler 大多数的应用程序将数据存储在关系数据库、xml文件中。
对这样的数据进行搜索是很常见的应用。
所谓的DataImportHandler提供一种可配置的方式向solr导入数据,可以一次全部导入,也可以增量导入。
概览 目标 能够读取关系数据库中的数据。
通过可配置的方式,能够将数据库中多列、多表的数据生成solr文档 能够通过solr文档更新solr 提供 通过配置文件就能够导入所有数据的能力 能够发现并处理 由insert、update带来的变化(我们假定在表中有一个叫做“last-modified的列”) 能够配置 “完全导入”和“增量导入”的时间 让读取xml文件,并建立索引成为可配置。
能够将 其他的数据源(例如:
ftp,scp,etc)或者其他格式的文档(Json,csv)以插件的形式集成到项目中。
设计思路 这个Handler首先要在solrconfig.xml文件中配置下,如下所示。
/
home/
username/
data-config.xml 从它的名字上,我们或许也可以猜到, DataImportHandler正是requestHandler的实现。
我们一共需要在两个地方配置文件中进行一些配置。
solrconfig.xml 。
data-config.xml必须在这个文件中配置,datasource也可以。
不过,一般将datasource放在data-config.xml文件中。
data-config.xml 怎样获取数据?(查询语句、url等等) 要读什么样的数据(关系数据库中的列、或者xml的域) 做什么样的处理(修改/
添加/
删除) 跟关系数据库一起使用 下面几个步骤是必要的. 定义一个data-config.xml 文件,并这个它的路径配置到solrconfig.xml 中关于DataImportHandler的配置中。
给出Connection的信息(假设你选择在solrconfig中配置datasource) 打开DataImportHandler页面去验证,是否该配置的都配置好了。
http:
/
/
localhost:
8983/
solr/
dataimport 使用“完全导入”命令将数据从数据库中导出,并提交给solr建立索引 使用“增量导入”命令对数据库发生的变化的数据导出,并提交给solr建立索引。
配置数据源 将dataSource标签直接添加到dataConfig下面,即成为dataConfig的子元素. 数据源也可以配置在solrconfig.xml中 属性type 指定了实现的类型。
它是可选的。
默认的实现是JdbcDataSource。
属性 name 是datasources的名字,当有多个datasources时,可以使用name属性加以区分 其他的属性都是随意的,根据你使用的DataSource实现而定。
当然 你也可以实现自己的DataSource。
多数据源 一个配置文件可以配置多个数据源。
增加一个dataSource元素就可以增加一个数据源了。
name属性可以区分不同的数据源。
如果配置了多于一个的数据源,那么要注意将name配置成唯一的。
例如:
然后这样使用 .. .. .. .. 配置JdbcDataSource JdbcDataSource中的属性有 driver(必需的):
jdbc驱动名称 url(必需的):
jdbc链接 user:
用户名 password:
密码 批量大小:
jdbc链接中的批量大小 任何其他的在JdbcDataSource中配置的属性,都会被直接传给jdbc driver 配置data-config.xml solr document是schema,它的域上的值可能来自于多个表. data-config.xml的根元素是document。
一个document元素代表了一种文档。
一个document元素中包含了一个或者多个root实体。
一个root实体包含着一些子实体,这些子实体能够包含其他的实体。
实体就是,关系数据库上的表或者视图。
每个实体都能够包含多个域,每个域对应着数据库返回结果中的一列。
域的名字跟列的名字默认是一样的。
如果一个列的名字跟solr field的名字不一样,那么属性name就应该要给出。
其他的需要的属性在solrschema.xml文件中配置。
为了能够从数据库中取得想要的数据,我们的设计支持标准sql规范。
这使得用户能够使用他任何想要的sql语句。
root实体是一个中心表,使用它的列可以把表连接在一起。
dataconfig的结构 dataconfig的结构不是一成不变的,entity和field元素中的属性是随意的,这主要取决于processor和transformer。
以下是entity的默认属性 name(必需的):
name是唯一的,用以标识entity processor:
只有当datasource不是RDBMS时才是必需的。
默认值是SqlEntityProcessor transformer:
转换器将会被应用到这个entity上,详情请浏览transformer部分。
pk:
entity的主键,它是可选的,但使用“增量导入”的时候是必需。
它跟schema.xml中定义的uniqueKey没有必然的联系,但它们可以相同。
rootEntity:
默认情况下,document元素下就是根实体了,如果没有根实体的话,直接在实体下面的实体将会被看做跟实体。
对于根实体对应的数据库中返回的数据的每一行,solr都将生成一个document。
一下是SqlEntityProcessor的属性 query (required) :
sql语句 deltaQuery :
只在“增量导入”中使用 parentDeltaQuery :
只在“增量导入”中使用 deletedPkQuery :
只在“增量导入”中使用 deltaImportQuery :
(只在“增量导入”中使用) . 如果这个存在,那么它将会在“增量导入”中导入phase时代替query产生作用。
这里有一个命名空间的用法${dataimporter.delta.}详情请看solr1.4.
主要分为两部分,第一部分是对《db-data-config.xml》的配置内容的讲解(属于高级内容),第二部分是DataImportHandler(属于基础),第三部分是对db-data-config.xml的进阶 第一部分是对《db-data-config.xml》 query是获取全部数据的SQL deltaImportQuery是获取增量数据时使用的SQL deltaQuery是获取pk的SQL parentDeltaQuery是获取父Entity的pk的SQL Full Import工作原理:
执行本Entity的Query,获取所有数据;
针对每个行数据Row,获取pk,组装子Entity的Query;
执行子Entity的Query,获取子Entity的数据。
Delta Import工作原理:
查找子Entity,直到没有为止;
执行Entity的deltaQuery,获取变化数据的pk;
合并子Entity parentDeltaQuery得到的pk;
针对每一个pk Row,组装父Entity的parentDeltaQuery;
执行parentDeltaQuery,获取父Entity的pk;
执行deltaImportQuery,获取自身的数据;
如果没有deltaImportQuery,就组装Query 限制:
子Entity的query必须引用父Entity的pk 子Entity的parentDeltaQuery必须引用自己的pk 子Entity的parentDeltaQuery必须返回父Entity的pk deltaImportQuery引用的必须是自己的pk 第二部分是DataImportHandler 关于DataImportHandler的具体使用方法,详见下文,如果你英文超级好,那看这个链接吧:
http:
/
/
wiki.apache.org/
solr/
DataImportHandler 大多数的应用程序将数据存储在关系数据库、xml文件中。
对这样的数据进行搜索是很常见的应用。
所谓的DataImportHandler提供一种可配置的方式向solr导入数据,可以一次全部导入,也可以增量导入。
概览 目标 能够读取关系数据库中的数据。
通过可配置的方式,能够将数据库中多列、多表的数据生成solr文档 能够通过solr文档更新solr 提供 通过配置文件就能够导入所有数据的能力 能够发现并处理 由insert、update带来的变化(我们假定在表中有一个叫做“last-modified的列”) 能够配置 “完全导入”和“增量导入”的时间 让读取xml文件,并建立索引成为可配置。
能够将 其他的数据源(例如:
ftp,scp,etc)或者其他格式的文档(Json,csv)以插件的形式集成到项目中。
设计思路 这个Handler首先要在solrconfig.xml文件中配置下,如下所示。
/
home/
username/
data-config.xml 从它的名字上,我们或许也可以猜到, DataImportHandler正是requestHandler的实现。
我们一共需要在两个地方配置文件中进行一些配置。
solrconfig.xml 。
data-config.xml必须在这个文件中配置,datasource也可以。
不过,一般将datasource放在data-config.xml文件中。
data-config.xml 怎样获取数据?(查询语句、url等等) 要读什么样的数据(关系数据库中的列、或者xml的域) 做什么样的处理(修改/
添加/
删除) 跟关系数据库一起使用 下面几个步骤是必要的. 定义一个data-config.xml 文件,并这个它的路径配置到solrconfig.xml 中关于DataImportHandler的配置中。
给出Connection的信息(假设你选择在solrconfig中配置datasource) 打开DataImportHandler页面去验证,是否该配置的都配置好了。
http:
/
/
localhost:
8983/
solr/
dataimport 使用“完全导入”命令将数据从数据库中导出,并提交给solr建立索引 使用“增量导入”命令对数据库发生的变化的数据导出,并提交给solr建立索引。
配置数据源 将dataSource标签直接添加到dataConfig下面,即成为dataConfig的子元素. 数据源也可以配置在solrconfig.xml中 属性type 指定了实现的类型。
它是可选的。
默认的实现是JdbcDataSource。
属性 name 是datasources的名字,当有多个datasources时,可以使用name属性加以区分 其他的属性都是随意的,根据你使用的DataSource实现而定。
当然 你也可以实现自己的DataSource。
多数据源 一个配置文件可以配置多个数据源。
增加一个dataSource元素就可以增加一个数据源了。
name属性可以区分不同的数据源。
如果配置了多于一个的数据源,那么要注意将name配置成唯一的。
例如:
然后这样使用 .. .. .. .. 配置JdbcDataSource JdbcDataSource中的属性有 driver(必需的):
jdbc驱动名称 url(必需的):
jdbc链接 user:
用户名 password:
密码 批量大小:
jdbc链接中的批量大小 任何其他的在JdbcDataSource中配置的属性,都会被直接传给jdbc driver 配置data-config.xml solr document是schema,它的域上的值可能来自于多个表. data-config.xml的根元素是document。
一个document元素代表了一种文档。
一个document元素中包含了一个或者多个root实体。
一个root实体包含着一些子实体,这些子实体能够包含其他的实体。
实体就是,关系数据库上的表或者视图。
每个实体都能够包含多个域,每个域对应着数据库返回结果中的一列。
域的名字跟列的名字默认是一样的。
如果一个列的名字跟solr field的名字不一样,那么属性name就应该要给出。
其他的需要的属性在solrschema.xml文件中配置。
为了能够从数据库中取得想要的数据,我们的设计支持标准sql规范。
这使得用户能够使用他任何想要的sql语句。
root实体是一个中心表,使用它的列可以把表连接在一起。
dataconfig的结构 dataconfig的结构不是一成不变的,entity和field元素中的属性是随意的,这主要取决于processor和transformer。
以下是entity的默认属性 name(必需的):
name是唯一的,用以标识entity processor:
只有当datasource不是RDBMS时才是必需的。
默认值是SqlEntityProcessor transformer:
转换器将会被应用到这个entity上,详情请浏览transformer部分。
pk:
entity的主键,它是可选的,但使用“增量导入”的时候是必需。
它跟schema.xml中定义的uniqueKey没有必然的联系,但它们可以相同。
rootEntity:
默认情况下,document元素下就是根实体了,如果没有根实体的话,直接在实体下面的实体将会被看做跟实体。
对于根实体对应的数据库中返回的数据的每一行,solr都将生成一个document。
一下是SqlEntityProcessor的属性 query (required) :
sql语句 deltaQuery :
只在“增量导入”中使用 parentDeltaQuery :
只在“增量导入”中使用 deletedPkQuery :
只在“增量导入”中使用 deltaImportQuery :
(只在“增量导入”中使用) . 如果这个存在,那么它将会在“增量导入”中导入phase时代替query产生作用。
这里有一个命名空间的用法${dataimporter.delta.}详情请看solr1.4.
