在查询中搜索多个单词

在查询中搜索多个单词

本文介绍了Solr 在查询中搜索多个单词的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在 solr 架构中有以下字段

I have following fields in solr schema

make
model
city
province

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

I created a copyfield search and copy these 4 field in it

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

now I want, if a user is searching for

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

我应该得到连续制造是奥迪和型号是 a4 的结果.

I should get result where in a row make is audi and model is a4.

如果我搜索

'asd audi asd'

那么我应该只得到奥迪的结果.

then i should get result of audi only.

如果我搜索

'asd aasd audi asd a4',

然后它应该显示奥迪 a4 结果.

then it should display audi a4 results.

请帮助我实现这一目标.

Please help me to achieve this.

请参阅复制字段的架构

   <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"/>

推荐答案

您可以为您的领域尝试这个 fieldType.

You can try this fieldType for your field.

<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>

或者你可以试试这个字段输入搜索字段

or you can try this field Type for search field

<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"/>

这篇关于Solr 在查询中搜索多个单词的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-22 18:30