【060】solr6.3与MySQL结合使用的简明教程(四)

多对多表关系的查询

在实际应用中,我们经常会遇到多对多关系的表结构。我们在进行全文检索的时候,需要查询相关联的其他表的数据。因此,本文举了一个例子来进行说明。

为了进行搜索,我们需要数据。下面给出了 MySQL表结构的定义和相关的数据:

CREATE TABLE `t_book` (
  `c_id` varchar(100) NOT NULL,
  `c_name` varchar(45) DEFAULT NULL,
  `c_isbn` varchar(45) DEFAULT NULL,
  `c_price` decimal(5,2) DEFAULT NULL,
  PRIMARY KEY (`c_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `t_author` (
  `c_id` varchar(100) NOT NULL,
  `c_address` varchar(45) DEFAULT NULL,
  `c_balance` decimal(9,3) DEFAULT NULL,
  `c_birthday` datetime DEFAULT NULL,
  `c_is_vip` bit(1) DEFAULT NULL,
  `c_level` int(11) DEFAULT NULL,
  `c_name` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`c_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `tm_book_author` (
  `c_author_id` varchar(100) NOT NULL,
  `c_book_id` varchar(100) NOT NULL,
  PRIMARY KEY (`c_author_id`,`c_book_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

其中t_book是书的表,t_author是作者表。tm_book_author是一个中间表,关联书和作者。tm_book_author中的c_author_id 是作者的ID。tm_book_author中的c_book_id是书的ID。书和作者是多对多的关系,一本书可以有多个作者联合编写。一个作者也可以出版多本书。本例子使用uuid作为主键。

我们把 solr-6.3.0.zip 文件解压后,放到 E:\blog\test1\solr-6.3.0 文件夹下。复制粘贴 E:\blog\test1\solr-6.3.0\example\example-DIH\solr\db 文件夹,重命名为db4。这里db文件夹和db4文件夹在同一级,是并列的关系。把mysql的java驱动文件mysql-connector-java-5.1.40.jar 放到 db4/lib 文件夹下。

用编辑器打开 db4/conf/solrconfig.xml ,搜索一下“lib”字符串,找到下面几行:







  



在这段代码下面,紧接着另起一行,加入下面的内容:


这么做是为了通知solr6.3 mysql的java驱动的路径。这项配置使solr可以从mysql获得数据。

使用编辑器打开 db-data-config.xml 文件。把原来的文件内容替换成下面的内容:


    
    
        
              
              
            
            
            
                
            
        
    

dataSource标签的属性是MySQL的连接配置。这是我的电脑上的配置。你需要根据你自己的情况进行配置。注意:如果密码中包含 & 符号,那么需要使用 &来进行转义。

用编辑器打开 db4/conf/managed-schema 文件。文件内容替换成下面的:




  id
  
    
      
      
      
      
    
  
  
    
      
    
    
      
    
  
  
  
  
  
  
    
      
    
    
      
    
  
  
  
  
  
  
  
  
  
    
      
      
    
  
  
    
      
      
    
  
  
    
      
      
    
  
  
  
  
  
  
  
    
      
      
      
      
      
    
  
  
    
      
      
      
      
    
  
  
    
      
      
      
      
      
    
  
  
    
      
      
      
      
    
  
  
    
      
      
      
      
      
    
  
  
    
      
      
      
      
    
  
  
    
      
      
      
      
    
  
  
    
      
      
      
      
      
    
  
  
    
      
      
      
      
    
  
  
    
      
      
      
      
      
      
    
    
      
      
      
      
      
      
      
    
  
  
    
      
      
      
      
      
      
    
    
      
      
      
      
      
      
      
    
  
  
    
      
      
      
      
      
      
      
      
    
  
  
    
      
      
      
      
    
  
  
    
      
      
      
      
    
  
  
    
      
      
      
      
      
      
    
  
  
    
      
      
      
      
    
  
  
    
      
      
      
      
      
    
  
  
    
      
      
      
      
      
      
    
  
  
    
      
      
      
    
    
      
      
      
      
    
  
  
    
      
      
      
      
    
    
      
      
      
      
    
  
  
    
      
      
      
      
    
  
  
    
      
      
      
      
      
      
    
  
  
    
      
      
      
      
    
  
  
    
      
      
      
      
    
  
  
    
      
      
      
      
    
  
  
    
      
      
      
      
      
    
  
  
    
      
      
      
      
      
      
      
    
  
  
    
      
      
      
      
    
  
  
    
      
      
      
      
      
    
  
  
    
      
      
      
      
    
  
  
    
      
      
      
      
    
  
  
    
      
      
      
      
    
  
  
    
      
      
      
      
    
  
  
    
      
      
      
      
    
  
  
    
      
      
      
    
  
  
    
      
      
      
      
      
    
  
  
    
      
    
  
  
  
  
  
  

  
  
  
  
  
  
  

重新启动solr,命令如下:

solr stop -all
solr -e dih

待solr启动后,访问 http://localhost:8983/solr 。在管理界面里面,core selector 下拉列表选择db4。下拉列表下方的菜单选择“Dataimport”菜单项。菜单右边有一个“/dataimport”面板。面板上,Command下拉列表选择“full-import”。选择两个复选框“clean”和”commit“。其余的复选框不用选中。Entity下拉列表不用选择。”Start, Rows“和”Custom Parameters“两项默认值就行。点击Execute按钮,solr6.3 会在后端启动一个线程来更新配置和数据。点击 Refresh Status 获取当前的更新状态。等待出现 Indexing completed. Added/Updated... 一类的绿字提示后,就说明更新已经完成。
直接点击Query菜单项,点击”Execute Query“按钮就可以得到查询的数据了。返回的数据结构如下:

{
  "responseHeader":{
    "status":0,
    "QTime":5,
    "params":{
      "q":"*:*",
      "indent":"on",
      "wt":"json",
      "_":"1485051096657"}},
  "response":{"numFound":13,"start":0,"docs":[
      {
        "id":"4a740dab-b5d7-4a7e-92b8-41dc80ea5acd",
        "isbn":"isbn11_啊",
        "name":"书11",
        "text":"书11 isbn11_啊",
        "_version_":1557188929198751744},
      {
        "id":"b01",
        "isbn":"isbn1",
        "name":"书1",
        "text":"书1 isbn1",
        "authorName":["李三"],
        "_version_":1557188929226014720},
      {
        "id":"b02",
        "isbn":"isbn2",
        "name":"书2",
        "text":"书2 isbn2",
        "authorName":["ttt",
          "李三"],
        "_version_":1557188929228111872},
      {
        "id":"b03",
        "isbn":"isbn3",
        "name":"书3",
        "text":"书3 isbn3",
        "authorName":["呼呼",
          "李三"],
        "_version_":1557188929230209024},
      {
        "id":"b04",
        "isbn":"isbn4",
        "name":"书4",
        "text":"书4 isbn4",
        "_version_":1557188929232306176},
      {
        "id":"b05",
        "isbn":"isbn5",
        "name":"书5",
        "text":"书5 isbn5",
        "_version_":1557188929233354752},
      {
        "id":"b06",
        "isbn":"isbn6",
        "name":"书6",
        "text":"书6 isbn6",
        "_version_":1557188929234403328},
      {
        "id":"b07",
        "isbn":"isbn7",
        "name":"书7",
        "text":"书7 isbn7",
        "_version_":1557188929236500480},
      {
        "id":"b08",
        "isbn":"isbn8",
        "name":"书8",
        "text":"书8 isbn8",
        "_version_":1557188929238597632},
      {
        "id":"b09",
        "isbn":"isbn9",
        "name":"书李一9",
        "text":"书李一9 isbn9",
        "_version_":1557188929239646208}]
  }}

系列教程

solr6.3与MySQL结合使用的简明教程(一)

solr6.3与MySQL结合使用的简明教程(二)

solr6.3与MySQL结合使用的简明教程(三)——SolrException: undefined field text错误如何解决

solr6.3与MySQL结合使用的简明教程(四)

solr6.3与MySQL结合使用的简明教程(五)——中文分词

你可能感兴趣的:(solr,Lucene,数据库,mysql,solr,全文检索)