如何在 solr 中 运行 一个 sql 查询

How to run a sql query in solr

好的,现在我已经成功安装了 solr 和索引数据库,结构如下:DB_NAME - solr,Table - users

我的数据库数据-config.xml 文件:

<dataConfig>
  <dataSource type="JdbcDataSource"
            driver="com.mysql.jdbc.Driver"
            url="jdbc:mysql://localhost:3306/solr"
            user="root"
            password="" /> 
  <document>
    <entity name="users" query="select id,name from users;" />

    <field column="ID" name="id" /> 
    <field column="NAME" name="name" />

  </document>
</dataConfig>

数据库 table 用户的第 returns 行。

问题 1 :

但是如果我想像 'Rakesh Shetty' 那样搜索并且它应该 return 结果 "Rakesh Vasant Shetty" 我该怎么办?

我试过 <entity name="users" query="select id,name from users where name like '%Rakesh Shetty%' ;" /> 但是 return 结果是空的。

问题 2 :

另外,我怎样才能使这个搜索查询动态化?我的意思是会有一个带有搜索文本框的表单,它应该查询 solr?我正在使用 php 和 solr 5.1.0.

提前致谢。

参考:SOLR DIH USING CUSTOM VARIABLES

所以基本上你需要将自定义变量传递给你的 DIH.xml 文件,比如

http://localhost:8983/solr/{collection_name}/dataimport?command=full-import&name=Rakesh&commit=true

并且在 DIH 文件中,您可以使用 ${dataimporter.request.name} 访问此变量,并在您的 DIH 查询中使用。

例如,

 <entity name="users" query="select id,name from users where name ='${dataimporter.request.name}' ;" />

对于您的动态搜索,请参阅下面的link

http://solr.pl/en/2010/10/18/solr-and-autocomplete-part-1/

尝试使用以下架构。

<schema name="simple" version="1.5"> 

<types> 
<fieldType name="text" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="true">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" preserveOriginal="1" splitOnCaseChange="1"/>
<filter class="solr.LowerCaseFilterFactory"/>

</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="0"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>


<fieldType name="int" class="solr.TrieIntField" precisionStep="0" omitNorms="true" positionIncrementGap="0"/> 
</types> 

<fields> 

<field name='id' type='int' required='true' indexed="true" stored="true"/> 
<field name='name' type='text' required='true' indexed="true" stored="true"/> 


</fields> 

<uniqueKey>id</uniqueKey> 


<defaultSearchField>name</defaultSearchField> 
<solrQueryParser defaultOperator='OR' /> 

</schema>