如何忽略SOLR查询中的某些字段

时间:2017-02-15 11:05:22

标签: solr solrj solr-query-syntax

我有 Solr 5.3.1 并且需要对除了某些字段之外的所有字段进行查询(我需要在某些字段中搜索,而不是通过这种方式检索字段来检索[/?q = query& fl] = field1,field2,field3])

我尝试了一些解决方案,但没有工作

1. How to exclude fields in a SOLR query [此解决方案不起作用]

2. [以下解决方案工作但需要更多时间]

query = field1:"+txtSearch+"OR field1:"+ txtSearch+" OR field1:"+txtSearch 

3.我在 data-config.xml 中设置 indexed =" false" 仅忽略此字段中的搜索,但是当我搜索所有内容时字段http://localhost:8983/solr/test?q=query查询在所有字段中搜索,无论 indexed =" false"或者是真的

我寻找所有这些链接

Retrieving specific fields in a Solr query?

How to exclude fields in a SOLR query

https://www.drupal.org/node/1933996

2 个答案:

答案 0 :(得分:3)

使用copyField

以下是如何使用它:

  • 使所有字段存储=“true”并索引=“false”
  • 同时创建一个新字段,说cffield,其中multiValued =“true”,stored =“false”,indexed =“true”

示例架构:

<field name="field1" type="string" indexed="false" stored="true"/>
<field name="field2" type="string" indexed="false" stored="true"/>
<field name="field3" type="string" indexed="false" stored="true"/>
....
<field name="cffield" type="string" indexed="true" stored="false" multiValued="true"/>
  • 现在您要搜索所有字段,将使用copyField标记的源值设置为从源字段复制到dest

示例架构:

<copyField source="field1" dest="cffield"/>
<copyField source="field2" dest="cffield"/>
....

现在您可以使用

进行搜索
query = cffield:txtSearch

这将为您提供使用copyField的源和cffield作为dest的所有字段的结果

答案 1 :(得分:0)

indexed="false"  需要在schema.xml中提及。

修改schema.xml后,需要重新索引数据。(还需要重新启动服务器)

然后solr将不会搜索未编入索引的字段。 如果要在特定字段中搜索,可以使用字段名称和字段的搜索值。

喜欢

   `q=field1:"value1"`
    q=field1:value1 OR field2:value2
    q=field1:value1 AND field2:value2
    q=value1&fq=field2:value2&fq=field3:value3