2

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

在此处输入图像描述

我的 db-data-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>

它返回数据库表用户的行。

问题1:

但是,如果我想像 'Rakesh Shetty' 进行搜索并且它应该返回结果“Rakesh Vasant Shetty”,我该怎么办?

我已经尝试过<entity name="users" query="select id,name from users where name like '%Rakesh Shetty%' ;" />,但它返回空结果。

问题2:

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

提前致谢。

4

2 回答 2

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>
于 2015-05-12T12:15:25.647 回答
0

参考:SOLR DIH 使用自定义变量

所以基本上你需要将自定义变量传递给你的 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}' ;" />

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

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

于 2015-05-12T09:05:55.520 回答