没有字段名称的搜索中没有搜索Solr dynamicField

时间:2014-10-06 02:29:58

标签: solr schema

我正在尝试Solr 4.10中的示例数据库,而不了解dynamicFields的工作原理。架构定义

dynamicField name="*_s"  type="string"  indexed="true"  stored="true"

如果我添加一个带有新字段名称的新项目(比如JSON格式的"example_s":"goober"),那么像

这样的查询
?q=goober

返回没有匹配项,而

?q=example_s:goober

会找到匹配。我错过了什么?

2 个答案:

答案 0 :(得分:0)

我希望看到您用来执行上述查询的solrconfig.xml文件中的SearchHandler。

在SearchHandler中,我们通常有默认查询字段,即qf参数。

检查您的动态字段 example_s 是否存在于solrconfig文件的查询字段列表中,否则您可以在向搜索处理程序发送查询时将其传递。

希望这有助于您解决问题。

答案 1 :(得分:0)

如果您使用的是默认架构,请参阅以下内容:

  1. 您可能正在使用默认的终点(/ select),因此您可以从中获得搜索类型和参数的定义。这意味着,它是默认(lucene)搜索和the field searched is text
  2. 文本字段是一个聚合,由copyField instruction from other fields填充。
  3. 您的dynamic field definition for *_s允许您使用以_s结尾的任何名称对文本编制索引,例如example_s。它已被索引(因此您可以直接搜索它)并存储(因此您可以在询问所有字段时看到它)。但是,它不会将其作为一般文本进行搜索。请注意(与ElasticSearch不同),Solr字符串必须完全匹配。如果你有一些多字文本,几乎没有任何一点搜索它。 "落花生"是一个词,所以在这里理解差异并不是一个很好的例子。
  4. 最简单的解决方案是添加另一个copyField指令: <copyField source="*_s" dest="text"/>,然后您的所有* _s动态字段也可以搜索。但请注意,搜索分析器是* _s定义的那些,而是for the text field's definition,它不是字符串,而是text_general,在文件的其他地方定义。
  5. 对于Solr vs. ElasticSearch,他们都在魔法的不同方面犯错。 Solr使您可以配置系统,并且可以非常轻松地查看当前的确切配置。 ElasticSearch会隐藏所有配置,但您必须重新发现它想要更改的默认行为。最后,结果可能类似,并在中间某处遇到。

相关问题