Solr在查询中搜索多个单词

时间:2015-08-10 08:59:45

标签: php search solr

我在solr架构中有以下字段

make
model
city
province

我创建了一个copyfield搜索并将这4个字段复制到其中

现在我想要,如果用户正在搜索

'audi a4' where audi is a make and a4 is model, 

我应该得到结果,连续make是audi,模型是a4。

如果我搜索

'asd audi asd' 

然后我应该只得到奥迪的结果。

如果我搜索

'asd aasd audi asd a4',

然后它应该显示audi a4结果。

请帮助我实现这一目标。

请参阅复制字段的架构

   <copyField source="Make" dest="search"/>
   <copyField source="Model" dest="search"/>
   <copyField source="City" dest="search"/>

创建的字段如下

<field name="search" type="string" indexed="true" stored="false" multiValued="true"/>

1 个答案:

答案 0 :(得分:0)

您可以为您的字段尝试此fieldType。

<fieldType name="text" class="solr.TextField">
    <analyzer type="index">
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
    </analyzer>
    <analyzer type="query">
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
    </analyzer>
</fieldType>

或者您可以尝试使用此字段输入搜索字段

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

所以你的领域现在是

<field name="search" type="text_ws" indexed="true" stored="false" multiValued="true"/>