【问题标题】:How can I search all field in SOLR that contain the keywords,.?如何搜索 SOLR 中包含关键字的所有字段,.?
【发布时间】:2011-11-28 10:16:20
【问题描述】:

例如,我的搜索关键字是:“篮球”。什么查询可以获取所有包含“Basket Ball”的字段?? 我尝试过使用 *:Basket Ball,但它不起作用。

【问题讨论】:

    标签: solr field


    【解决方案1】:

    schema.xml 定义默认搜索字段 -

    <defaultSearchField>text</defaultSearchField>
    

    您可以将所有字段复制到此默认搜索字段。

    <copyField source="field1" dest="text"/>
    <copyField source="field2" dest="text"/>
    <copyField source="field3" dest="text"/>
    

    查询q=basket ball 应该可以工作。

    【讨论】:

    【解决方案2】:

    默认搜索字段(自 3.6 起)现在在 solrconfig.xml 中定义

    例如在 Solr configsets 目录附带的 solrconfig.xml 中,您会看到类似

      <initParams path="/update/**,/query,/select,/tvrh,/elevate,/spell">
        <lst name="defaults">
          <str name="df">allText</str>
        </lst>
      </initParams>
    

    您可以将allText 更改为yourDefaultSearchFieldName

    【讨论】:

    • 这样做后,搜索时出现错误“未定义的字段文本”
    • 您使用的是哪个版本的 Solr?
    • 我正在使用 solr 5.3
    • 在我们的配置中,这是在 solrconfig.xml &lt;initParams path="/update/**,/query,/select,/tvrh,/elevate,/spell"&gt; &lt;lst name="defaults"&gt; &lt;str name="df"&gt;allText&lt;/str&gt; &lt;/lst&gt; &lt;/initParams&gt; 中定义的,并且字段 'allText' 在 schema.xml 中定义如下 &lt;field name="allText" type="text_general" indexed="true" stored="false" multiValued="true"/&gt; 所以我猜你需要在架构 - 在我们的例子中,该字段称为“allText”
    【解决方案3】:

    您需要使用能够将令牌分派到多个字段的查询解析器,例如 (e)dismax。例如,如果您有两个字段 field1field2http://solr/select?q={!dismax}Basket Ball&amp;qf=field1^1 field2^1

    有关 dismax 配置的更多信息,请参阅 http://wiki.apache.org/solr/DisMaxQParserPlugin#qf_.28Query_Fields.29

    【讨论】:

    • 如果这样,它仍然必须指定将在搜索权中的字段,.? ^1这个字符是什么意思,.?
    • 是的,您需要指定每个字段。 '^' 字符使您能够为您的领域赋予权重。例如,如果field1 中的匹配应该是field2 中匹配的两倍,则可以使用qf=field1^2 field2^1
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多