书单推荐:成为Java顶级程序员架构师 ,这20来本(高薪)必看点击获取
多对多表关系的查询
在实际应用中,我们经常会遇到多对多关系的表结构。我们在进行全文检索的时候,需要查询相关联的其他表的数据。因此,本文举了一个例子来进行说明。
为了进行搜索,我们需要数据。下面给出了 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”字符串,找到下面几行:
<lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-dataimporthandler-.*\.jar" /> <lib dir="${solr.install.dir:../../../..}/contrib/extraction/lib" regex=".*\.jar" /> <lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-cell-\d.*\.jar" /> <lib dir="${solr.install.dir:../../../..}/contrib/langid/lib/" regex=".*\.jar" /> <lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-langid-\d.*\.jar" /> <lib dir="${solr.install.dir:../../../..}/contrib/velocity/lib" regex=".*\.jar" /> <lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-velocity-\d.*\.jar" />
在这段代码下面,紧接着另起一行,加入下面的内容:
<lib dir="${solr.install.dir:../../../..}/example/example-DIH/solr/db4/lib/" regex="mysql-connector-java-5.1.40.jar" />
这么做是为了通知solr6.3 mysql的java驱动的路径。这项配置使solr可以从mysql获得数据。
使用编辑器打开 db-data-config.xml 文件。把原来的文件内容替换成下面的内容:
<dataConfig> <dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://127.0.0.1:3306/db1" user="root" encoding="UTF-8" password="123456"/> <document> <entity name="jynbook" processor="SqlEntityProcessor" pk="id" query="select c_id,c_name,c_isbn,concat(c_name,' ',c_isbn) text from t_book"> <field name="id" column="c_id" /> <field name="name" column="c_name" /> <field name="isbn" column="c_isbn" /> <field name="text" column="text" /> <entity name="jynauthor" query="select t1.c_name authorName from t_author t1 where t1.c_id in (select t2.c_author_id from tm_book_author t2 where t2.c_book_id='${jynbook.c_id}')"> <field name="authorName" column="authorName" /> </entity> </entity> </document></dataConfig>
dataSource标签的属性是MySQL的连接配置。这是我的电脑上的配置。你需要根据你自己的情况进行配置。注意:如果密码中包含 & 符号,那么需要使用 &来进行转义。
用编辑器打开 db4/conf/managed-schema 文件。文件内容替换成下面的:
<?xml version="1.0" encoding="UTF-8"?><!-- Solr managed schema - automatically generated - DO NOT EDIT --><schema name="example-DIH-db4" version="1.6"> <uniqueKey>id</uniqueKey> <fieldType name="alphaOnlySort" class="solr.TextField" omitNorms="true" sortMissingLast="true"> <analyzer> <tokenizer class="solr.KeywordTokenizerFactory"/> <filter class="solr.LowerCaseFilterFactory"/> <filter class="solr.TrimFilterFactory"/> <filter class="solr.PatternReplaceFilterFactory" pattern="([^a-z])" replace="all" replacement=""/> </analyzer> </fieldType> <fieldType name="ancestor_path" class="solr.TextField"> <analyzer type="index"> <tokenizer class="solr.KeywordTokenizerFactory"/> </analyzer> <analyzer type="query"> <tokenizer class="solr.PathHierarchyTokenizerFactory" delimiter="/"/> </analyzer> </fieldType> <fieldType name="binary" class="solr.BinaryField"/> <fieldType name="boolean" class="solr.BoolField" sortMissingLast="true"/> <fieldType name="currency" class="solr.CurrencyField" currencyConfig="currency.xml" defaultCurrency="USD" precisionStep="8"/> <fieldType name="date" class="solr.TrieDateField" positionIncrementGap="0" precisionStep="0"/> <fieldType name="descendent_path" class="solr.TextField"> <analyzer type="index"> <tokenizer class="solr.PathHierarchyTokenizerFactory" delimiter="/"/> </analyzer> <analyzer type="query"> <tokenizer class="solr.KeywordTokenizerFactory"/> </analyzer> </fieldType> <fieldType name="double" class="solr.TrieDoubleField" positionIncrementGap="0" precisionStep="0"/> <fieldType name="float" class="solr.TrieFloatField" positionIncrementGap="0" precisionStep="0"/> <fieldType name="ignored" class="solr.StrField" indexed="false" stored="false" multiValued="true"/> <fieldType name="int" class="solr.TrieIntField" positionIncrementGap="0" precisionStep="0"/> <fieldType name="location" class="solr.LatLonType" subFieldSuffix="_coordinate"/> <fieldType name="location_rpt" class="solr.SpatialRecursivePrefixTreeFieldType" geo="true" maxDistErr="0.001" distErrPct="0.025" distanceUnits="kilometers"/> <fieldType name="long" class="solr.TrieLongField" positionIncrementGap="0" precisionStep="0"/> <fieldType name="lowercase" class="solr.TextField" positionIncrementGap="100"> <analyzer> <tokenizer class="solr.KeywordTokenizerFactory"/> <filter class="solr.LowerCaseFilterFactory"/> </analyzer> </fieldType> <fieldType name="payloads" class="solr.TextField" indexed="true" stored="false"> <analyzer> <tokenizer class="solr.WhitespaceTokenizerFactory"/> <filter class="solr.DelimitedPayloadTokenFilterFactory" encoder="float"/> </analyzer> </fieldType> <fieldType name="phonetic" class="solr.TextField" indexed="true" stored="false"> <analyzer> <tokenizer class="solr.StandardTokenizerFactory"/> <filter class="solr.DoubleMetaphoneFilterFactory" inject="false"/> </analyzer> </fieldType> <fieldType name="point" class="solr.PointType" subFieldSuffix="_d" dimension="2"/> <fieldType name="random" class="solr.RandomSortField" indexed="true"/> <fieldType name="string" class="solr.StrField" sortMissingLast="true"/> <fieldType name="tdate" class="solr.TrieDateField" positionIncrementGap="0" precisionStep="6"/> <fieldType name="tdouble" class="solr.TrieDoubleField" positionIncrementGap="0" precisionStep="8"/> <fieldType name="text_ar" class="solr.TextField" positionIncrementGap="100"> <analyzer> <tokenizer class="solr.StandardTokenizerFactory"/> <filter class="solr.LowerCaseFilterFactory"/> <filter class="solr.StopFilterFactory" words="lang/stopwords_ar.txt" ignoreCase="true"/> <filter class="solr.ArabicNormalizationFilterFactory"/> <filter class="solr.ArabicStemFilterFactory"/> </analyzer> </fieldType> <fieldType name="text_bg" class="solr.TextField" positionIncrementGap="100"> <analyzer> <tokenizer class="solr.StandardTokenizerFactory"/> <filter class="solr.LowerCaseFilterFactory"/> <filter class="solr.StopFilterFactory" words="lang/stopwords_bg.txt" ignoreCase="true"/> <filter class="solr.BulgarianStemFilterFactory"/> </analyzer> </fieldType> <fieldType name="text_ca" class="solr.TextField" positionIncrementGap="100"> <analyzer> <tokenizer class="solr.StandardTokenizerFactory"/> <filter class="solr.ElisionFilterFactory" articles="lang/contractions_ca.txt" ignoreCase="true"/> <filter class="solr.LowerCaseFilterFactory"/> <filter class="solr.StopFilterFactory" words="lang/stopwords_ca.txt" ignoreCase="true"/> <filter class="solr.SnowballPorterFilterFactory" language="Catalan"/> </analyzer> </fieldType> <fieldType name="text_cjk" class="solr.TextField" positionIncrementGap="100"> <analyzer> <tokenizer class="solr.StandardTokenizerFactory"/> <filter class="solr.CJKWidthFilterFactory"/> <filter class="solr.LowerCaseFilterFactory"/> <filter class="solr.CJKBigramFilterFactory"/> </analyzer> </fieldType> <fieldType name="text_ckb" class="solr.TextField" positionIncrementGap="100"> <analyzer> <tokenizer class="solr.StandardTokenizerFactory"/> <filter class="solr.SoraniNormalizationFilterFactory"/> <filter class="solr.LowerCaseFilterFactory"/> <filter class="solr.StopFilterFactory" words="lang/stopwords_ckb.txt" ignoreCase="true"/> <filter class="solr.SoraniStemFilterFactory"/> </analyzer> </fieldType> <fieldType name="text_cz" class="solr.TextField" positionIncrementGap="100"> <analyzer> <tokenizer class="solr.StandardTokenizerFactory"/> <filter class="solr.LowerCaseFilterFactory"/> <filter class="solr.StopFilterFactory" words="lang/stopwords_cz.txt" ignoreCase="true"/> <filter class="solr.CzechStemFilterFactory"/> </analyzer> </fieldType> <fieldType name="text_da" class="solr.TextField" positionIncrementGap="100"> <analyzer> <tokenizer class="solr.StandardTokenizerFactory"/> <filter class="solr.LowerCaseFilterFactory"/> <filter class="solr.StopFilterFactory" format="snowball" words="lang/stopwords_da.txt" ignoreCase="true"/> <filter class="solr.SnowballPorterFilterFactory" language="Danish"/> </analyzer> </fieldType> <fieldType name="text_de" class="solr.TextField" positionIncrementGap="100"> <analyzer> <tokenizer class="solr.StandardTokenizerFactory"/> <filter class="solr.LowerCaseFilterFactory"/> <filter class="solr.StopFilterFactory" format="snowball" words="lang/stopwords_de.txt" ignoreCase="true"/> <filter class="solr.GermanNormalizationFilterFactory"/> <filter class="solr.GermanLightStemFilterFactory"/> </analyzer> </fieldType> <fieldType name="text_el" class="solr.TextField" positionIncrementGap="100"> <analyzer> <tokenizer class="solr.StandardTokenizerFactory"/> <filter class="solr.GreekLowerCaseFilterFactory"/> <filter class="solr.StopFilterFactory" words="lang/stopwords_el.txt" ignoreCase="false"/> <filter class="solr.GreekStemFilterFactory"/> </analyzer> </fieldType> <fieldType name="text_en" class="solr.TextField" positionIncrementGap="100"> <analyzer type="index"> <tokenizer class="solr.StandardTokenizerFactory"/> <filter class="solr.StopFilterFactory" words="lang/stopwords_en.txt" ignoreCase="true"/> <filter class="solr.LowerCaseFilterFactory"/> <filter class="solr.EnglishPossessiveFilterFactory"/> <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/> <filter class="solr.PorterStemFilterFactory"/> </analyzer> <analyzer type="query"> <tokenizer class="solr.StandardTokenizerFactory"/> <filter class="solr.SynonymFilterFactory" expand="true" ignoreCase="true" synonyms="synonyms.txt"/> <filter class="solr.StopFilterFactory" words="lang/stopwords_en.txt" ignoreCase="true"/> <filter class="solr.LowerCaseFilterFactory"/> <filter class="solr.EnglishPossessiveFilterFactory"/> <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/> <filter class="solr.PorterStemFilterFactory"/> </analyzer> </fieldType> <fieldType name="text_en_splitting" class="solr.TextField" autoGeneratePhraseQueries="true" positionIncrementGap="100"> <analyzer type="index"> <tokenizer class="solr.WhitespaceTokenizerFactory"/> <filter class="solr.StopFilterFactory" words="lang/stopwords_en.txt" ignoreCase="true"/> <filter class="solr.WordDelimiterFilterFactory" catenateNumbers="1" generateNumberParts="1" splitOnCaseChange="1" generateWordParts="1" catenateAll="0" catenateWords="1"/> <filter class="solr.LowerCaseFilterFactory"/> <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/> <filter class="solr.PorterStemFilterFactory"/> </analyzer> <analyzer type="query"> <tokenizer class="solr.WhitespaceTokenizerFactory"/> <filter class="solr.SynonymFilterFactory" expand="true" ignoreCase="true" synonyms="synonyms.txt"/> <filter class="solr.StopFilterFactory" words="lang/stopwords_en.txt" ignoreCase="true"/> <filter class="solr.WordDelimiterFilterFactory" catenateNumbers="0" generateNumberParts="1" splitOnCaseChange="1" generateWordParts="1" catenateAll="0" catenateWords="0"/> <filter class="solr.LowerCaseFilterFactory"/> <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/> <filter class="solr.PorterStemFilterFactory"/> </analyzer> </fieldType> <fieldType name="text_en_splitting_tight" class="solr.TextField" autoGeneratePhraseQueries="true" positionIncrementGap="100"> <analyzer> <tokenizer class="solr.WhitespaceTokenizerFactory"/> <filter class="solr.SynonymFilterFactory" expand="false" ignoreCase="true" synonyms="synonyms.txt"/> <filter class="solr.StopFilterFactory" words="lang/stopwords_en.txt" ignoreCase="true"/> <filter class="solr.WordDelimiterFilterFactory" catenateNumbers="1" generateNumberParts="0" generateWordParts="0" catenateAll="0" catenateWords="1"/> <filter class="solr.LowerCaseFilterFactory"/> <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/> <filter class="solr.EnglishMinimalStemFilterFactory"/> <filter class="solr.RemoveDuplicatesTokenFilterFactory"/> </analyzer> </fieldType> <fieldType name="text_es" class="solr.TextField" positionIncrementGap="100"> <analyzer> <tokenizer class="solr.StandardTokenizerFactory"/> <filter class="solr.LowerCaseFilterFactory"/> <filter class="solr.StopFilterFactory" format="snowball" words="lang/stopwords_es.txt" ignoreCase="true"/> <filter class="solr.SpanishLightStemFilterFactory"/> </analyzer> </fieldType> <fieldType name="text_eu" class="solr.TextField" positionIncrementGap="100"> <analyzer> <tokenizer class="solr.StandardTokenizerFactory"/> <filter class="solr.LowerCaseFilterFactory"/> <filter class="solr.StopFilterFactory" words="lang/stopwords_eu.txt" ignoreCase="true"/> <filter class="solr.SnowballPorterFilterFactory" language="Basque"/> </analyzer> </fieldType> <fieldType name="text_fa" class="solr.TextField" positionIncrementGap="100"> <analyzer> <charFilter class="solr.PersianCharFilterFactory"/> <tokenizer class="solr.StandardTokenizerFactory"/> <filter class="solr.LowerCaseFilterFactory"/> <filter class="solr.ArabicNormalizationFilterFactory"/> <filter class="solr.PersianNormalizationFilterFactory"/> <filter class="solr.StopFilterFactory" words="lang/stopwords_fa.txt" ignoreCase="true"/> </analyzer> </fieldType> <fieldType name="text_fi" class="solr.TextField" positionIncrementGap="100"> <analyzer> <tokenizer class="solr.StandardTokenizerFactory"/> <filter class="solr.LowerCaseFilterFactory"/> <filter class="solr.StopFilterFactory" format="snowball" words="lang/stopwords_fi.txt" ignoreCase="true"/> <filter class="solr.SnowballPorterFilterFactory" language="Finnish"/> </analyzer> </fieldType> <fieldType name="text_fr" class="solr.TextField" positionIncrementGap="100"> <analyzer> <tokenizer class="solr.StandardTokenizerFactory"/> <filter class="solr.ElisionFilterFactory" articles="lang/contractions_fr.txt" ignoreCase="true"/> <filter class="solr.LowerCaseFilterFactory"/> <filter class="solr.StopFilterFactory" format="snowball" words="lang/stopwords_fr.txt" ignoreCase="true"/> <filter class="solr.FrenchLightStemFilterFactory"/> </analyzer> </fieldType> <fieldType name="text_ga" class="solr.TextField" positionIncrementGap="100"> <analyzer> <tokenizer class="solr.StandardTokenizerFactory"/> <filter class="solr.ElisionFilterFactory" articles="lang/contractions_ga.txt" ignoreCase="true"/> <filter class="solr.StopFilterFactory" words="lang/hyphenations_ga.txt" ignoreCase="true"/> <filter class="solr.IrishLowerCaseFilterFactory"/> <filter class="solr.StopFilterFactory" words="lang/stopwords_ga.txt" ignoreCase="true"/> <filter class="solr.SnowballPorterFilterFactory" language="Irish"/> </analyzer> </fieldType> <fieldType name="text_general" class="solr.TextField" positionIncrementGap="100"> <analyzer type="index"> <tokenizer class="solr.StandardTokenizerFactory"/> <filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/> <filter class="solr.LowerCaseFilterFactory"/> </analyzer> <analyzer type="query"> <tokenizer class="solr.StandardTokenizerFactory"/> <filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/> <filter class="solr.SynonymFilterFactory" expand="true" ignoreCase="true" synonyms="synonyms.txt"/> <filter class="solr.LowerCaseFilterFactory"/> </analyzer> </fieldType> <fieldType name="text_general_rev" class="solr.TextField" positionIncrementGap="100"> <analyzer type="index"> <tokenizer class="solr.StandardTokenizerFactory"/> <filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/> <filter class="solr.LowerCaseFilterFactory"/> <filter class="solr.ReversedWildcardFilterFactory" maxPosQuestion="2" maxFractionAsterisk="0.33" maxPosAsterisk="3" withOriginal="true"/> </analyzer> <analyzer type="query"> <tokenizer class="solr.StandardTokenizerFactory"/> <filter class="solr.SynonymFilterFactory" expand="true" ignoreCase="true" synonyms="synonyms.txt"/> <filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/> <filter class="solr.LowerCaseFilterFactory"/> </analyzer> </fieldType> <fieldType name="text_gl" class="solr.TextField" positionIncrementGap="100"> <analyzer> <tokenizer class="solr.StandardTokenizerFactory"/> <filter class="solr.LowerCaseFilterFactory"/> <filter class="solr.StopFilterFactory" words="lang/stopwords_gl.txt" ignoreCase="true"/> <filter class="solr.GalicianStemFilterFactory"/> </analyzer> </fieldType> <fieldType name="text_hi" class="solr.TextField" positionIncrementGap="100"> <analyzer> <tokenizer class="solr.StandardTokenizerFactory"/> <filter class="solr.LowerCaseFilterFactory"/> <filter class="solr.IndicNormalizationFilterFactory"/> <filter class="solr.HindiNormalizationFilterFactory"/> <filter class="solr.StopFilterFactory" words="lang/stopwords_hi.txt" ignoreCase="true"/> <filter class="solr.HindiStemFilterFactory"/> </analyzer> </fieldType> <fieldType name="text_hu" class="solr.TextField" positionIncrementGap="100"> <analyzer> <tokenizer class="solr.StandardTokenizerFactory"/> <filter class="solr.LowerCaseFilterFactory"/> <filter class="solr.StopFilterFactory" format="snowball" words="lang/stopwords_hu.txt" ignoreCase="true"/> <filter class="solr.SnowballPorterFilterFactory" language="Hungarian"/> </analyzer> </fieldType> <fieldType name="text_hy" class="solr.TextField" positionIncrementGap="100"> <analyzer> <tokenizer class="solr.StandardTokenizerFactory"/> <filter class="solr.LowerCaseFilterFactory"/> <filter class="solr.StopFilterFactory" words="lang/stopwords_hy.txt" ignoreCase="true"/> <filter class="solr.SnowballPorterFilterFactory" language="Armenian"/> </analyzer> </fieldType> <fieldType name="text_id" class="solr.TextField" positionIncrementGap="100"> <analyzer> <tokenizer class="solr.StandardTokenizerFactory"/> <filter class="solr.LowerCaseFilterFactory"/> <filter class="solr.StopFilterFactory" words="lang/stopwords_id.txt" ignoreCase="true"/> <filter class="solr.IndonesianStemFilterFactory" stemDerivational="true"/> </analyzer> </fieldType> <fieldType name="text_it" class="solr.TextField" positionIncrementGap="100"> <analyzer> <tokenizer class="solr.StandardTokenizerFactory"/> <filter class="solr.ElisionFilterFactory" articles="lang/contractions_it.txt" ignoreCase="true"/> <filter class="solr.LowerCaseFilterFactory"/> <filter class="solr.StopFilterFactory" format="snowball" words="lang/stopwords_it.txt" ignoreCase="true"/> <filter class="solr.ItalianLightStemFilterFactory"/> </analyzer> </fieldType> <fieldType name="text_ja" class="solr.TextField" autoGeneratePhraseQueries="false" positionIncrementGap="100"> <analyzer> <tokenizer class="solr.JapaneseTokenizerFactory" mode="search"/> <filter class="solr.JapaneseBaseFormFilterFactory"/> <filter class="solr.JapanesePartOfSpeechStopFilterFactory" tags="lang/stoptags_ja.txt"/> <filter class="solr.CJKWidthFilterFactory"/> <filter class="solr.StopFilterFactory" words="lang/stopwords_ja.txt" ignoreCase="true"/> <filter class="solr.JapaneseKatakanaStemFilterFactory" minimumLength="4"/> <filter class="solr.LowerCaseFilterFactory"/> </analyzer> </fieldType> <fieldType name="text_lv" class="solr.TextField" positionIncrementGap="100"> <analyzer> <tokenizer class="solr.StandardTokenizerFactory"/> <filter class="solr.LowerCaseFilterFactory"/> <filter class="solr.StopFilterFactory" words="lang/stopwords_lv.txt" ignoreCase="true"/> <filter class="solr.LatvianStemFilterFactory"/> </analyzer> </fieldType> <fieldType name="text_nl" class="solr.TextField" positionIncrementGap="100"> <analyzer> <tokenizer class="solr.StandardTokenizerFactory"/> <filter class="solr.LowerCaseFilterFactory"/> <filter class="solr.StopFilterFactory" format="snowball" words="lang/stopwords_nl.txt" ignoreCase="true"/> <filter class="solr.StemmerOverrideFilterFactory" dictionary="lang/stemdict_nl.txt" ignoreCase="false"/> <filter class="solr.SnowballPorterFilterFactory" language="Dutch"/> </analyzer> </fieldType> <fieldType name="text_no" class="solr.TextField" positionIncrementGap="100"> <analyzer> <tokenizer class="solr.StandardTokenizerFactory"/> <filter class="solr.LowerCaseFilterFactory"/> <filter class="solr.StopFilterFactory" format="snowball" words="lang/stopwords_no.txt" ignoreCase="true"/> <filter class="solr.SnowballPorterFilterFactory" language="Norwegian"/> </analyzer> </fieldType> <fieldType name="text_pt" class="solr.TextField" positionIncrementGap="100"> <analyzer> <tokenizer class="solr.StandardTokenizerFactory"/> <filter class="solr.LowerCaseFilterFactory"/> <filter class="solr.StopFilterFactory" format="snowball" words="lang/stopwords_pt.txt" ignoreCase="true"/> <filter class="solr.PortugueseLightStemFilterFactory"/> </analyzer> </fieldType> <fieldType name="text_ro" class="solr.TextField" positionIncrementGap="100"> <analyzer> <tokenizer class="solr.StandardTokenizerFactory"/> <filter class="solr.LowerCaseFilterFactory"/> <filter class="solr.StopFilterFactory" words="lang/stopwords_ro.txt" ignoreCase="true"/> <filter class="solr.SnowballPorterFilterFactory" language="Romanian"/> </analyzer> </fieldType> <fieldType name="text_ru" class="solr.TextField" positionIncrementGap="100"> <analyzer> <tokenizer class="solr.StandardTokenizerFactory"/> <filter class="solr.LowerCaseFilterFactory"/> <filter class="solr.StopFilterFactory" format="snowball" words="lang/stopwords_ru.txt" ignoreCase="true"/> <filter class="solr.SnowballPorterFilterFactory" language="Russian"/> </analyzer> </fieldType> <fieldType name="text_sv" class="solr.TextField" positionIncrementGap="100"> <analyzer> <tokenizer class="solr.StandardTokenizerFactory"/> <filter class="solr.LowerCaseFilterFactory"/> <filter class="solr.StopFilterFactory" format="snowball" words="lang/stopwords_sv.txt" ignoreCase="true"/> <filter class="solr.SnowballPorterFilterFactory" language="Swedish"/> </analyzer> </fieldType> <fieldType name="text_th" class="solr.TextField" positionIncrementGap="100"> <analyzer> <tokenizer class="solr.ThaiTokenizerFactory"/> <filter class="solr.LowerCaseFilterFactory"/> <filter class="solr.StopFilterFactory" words="lang/stopwords_th.txt" ignoreCase="true"/> </analyzer> </fieldType> <fieldType name="text_tr" class="solr.TextField" positionIncrementGap="100"> <analyzer> <tokenizer class="solr.StandardTokenizerFactory"/> <filter class="solr.ApostropheFilterFactory"/> <filter class="solr.TurkishLowerCaseFilterFactory"/> <filter class="solr.StopFilterFactory" words="lang/stopwords_tr.txt" ignoreCase="false"/> <filter class="solr.SnowballPorterFilterFactory" language="Turkish"/> </analyzer> </fieldType> <fieldType name="text_ws" class="solr.TextField" positionIncrementGap="100"> <analyzer> <tokenizer class="solr.WhitespaceTokenizerFactory"/> </analyzer> </fieldType> <fieldType name="tfloat" class="solr.TrieFloatField" positionIncrementGap="0" precisionStep="8"/> <fieldType name="tint" class="solr.TrieIntField" positionIncrementGap="0" precisionStep="8"/> <fieldType name="tlong" class="solr.TrieLongField" positionIncrementGap="0" precisionStep="8"/> <field name="id" type="string" multiValued="false" indexed="true" required="true" stored="true"/> <field name="name" type="string" indexed="true" stored="true"/> <field name="isbn" type="string" indexed="true" stored="true"/> <field name="text" type="string" indexed="true" stored="true"/> <field name="authorName" type="string" indexed="true" stored="true" multiValued="true"/> <field name="_version_" type="long" indexed="true" stored="true"/></schema>
重新启动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“按钮就可以得到查询的数据了。返回的数据结构</a>如下:
{ "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}] }}
转载请注明:谷谷点程序 » solr mysql 多对多表关系的查询