0

在 Hue 和 Solr 中,动态字段都会导致问题。在 Hue 中,存储为动态字段的数据拒绝出现在默认 Solr 搜索中,该搜索显示来自导入集合的所有可用数据。它也无法搜索 text_general 类型并被索引和存储的数据。在 Solr 中,即使架构设置如下所示,动态字段似乎也没有被索引:

   <dynamicField name="*_t"  type="text_general"    indexed="true"  stored="true"/>
   <dynamicField name="*_txt" type="text_general"   indexed="true"  stored="true" multiValued="true"/>

这些设置与常规字段“名称”完全相同,该字段可进行令牌搜索并出现在 Hue 中的 Solr 搜索中。

   <field name="name" type="text_general" indexed="true" stored="true"/>

我的目标是使用标签和属性名称作为索引中的字段名称,这些值被索引。这在 solr 中有效,当我使用基本查询“start:star”时,我可以看到结果

"docs": [
      {
        "id": "5CCD1D4D-2D7D-4F6A-BD2B-FC9D8577493F",
        "name": "43-02 43 AVENUE",
        "borough_t": "QUEENS",
        "community_board_t": "02 QUEENS",
        "police_precinct_t": "Precinct 108",
        "city_council_district_t": "26",
        "created_date_t": "1305702000",
        "status_t": "Closed",
        "resolution_action_t": "Cleaning crew dispatched.  Property cleaned.",
        "closed_date_t": "1309244400",
        "x_coordinate_t": "1006146",
        "y_coordinate_t": "210783",
        "_version_": 1450333101007831000
      },

末尾带有 _t 的所有内容都被称为动态字段值,并且它之前的名称是标签中的名称。唯一可部分搜索的字段是名称字段。如果我在查询中搜索“43”,我将得到这个和其他“名称”中有 43 的文档。但是,如果我从 Police_precinct_t 字段中搜索单词“Precinct”,我的搜索将不会返回任何内容。所有这些都在 Solr 管理窗口中,通过转到http://HOST:8983/solr.

在顺化,我的信息更稀少。转到 Solr 搜索面板并执行默认的空白搜索会返回 Solr 数据库中所有数据的第一页。

1450333101007831000 5CCD1D4D-2D7D-4F6A-BD2B-FC9D8577493F 43-02 43 AVENUE

1450333092014194700 7606462C-8657-4113-9427-5CEF30FB5483 Engine 53/Ladder 43

1450333092021534700 EEB939BD-DE52-467E-8EA3-91C7AF8E162A Engine 43/Ladder 59

1450333095903363000 0BEDA34C-ECCE-4405-A0DD-6D9994C51CE3 102-18 43 AVENUE

1450333095906508800 F7B6F181-C289-4F42-9ADC-36971ABE813A 102-28 43 AVENUE

1450333095907557400 C0F5286F-3216-4A0A-A4D0-F6038020122C 102-28 43 AVENUE

1450333095908606000 1C94DAFF-AB59-452B-A569-6CE4472867C7 102-36 43 AVENUE

1450333096052260900 9C6AF32C-06FA-46B2-8266-2BC8CF23CE79 104-20 43 AVENUE

第一个值是版本,第二个是id,下一个是我用来测试Hue中是否只有定义的字段的名称值,这似乎是这种情况。动态字段数据甚至不会像在 Solr 管理面板中那样显示在 Hue 中,但我可以像在 Solr 查询窗口中那样搜索数据。如果我输入“borough_t:QUEENS”,我会在 Hue 和 Solr Query 中获得该确切字段和值匹配的所有结果。这不允许进行令牌匹配,并且与声明的动态字段的预期行为或其上面给出的属性不匹配。我正在使用集合 1 中 Solr 提供的示例 schema.xml。我已检查以确保没有任何其他动态字段与 glob "*_t" 发生冲突并在该字段时否定或出错

Solr 使用起来非常简单,并且通过一些阅读可以理解,但我似乎无法找到为什么 solr 拒绝按预期工作的答案。我正在使用 SolrJ 将我的文件索引到 Solr,然后我在 Hue (2.5) 中使用 Solr 管理面板和 Solr Search 与索引数据进行交互。

我从NYC Open Data Site提取的 XML 数据示例将无法正确格式化,但如果您真的感兴趣,可以查找 Firehouse Location 和 Graffiti Location 数据并导出 xml。这就是我要放入 Solr 的数据。我可以看到的解决方案似乎是编写硬编码解释代码,将每个标签值分配给具有 text_general 设置的确切字段,或者动态创建字段,这与动态字段似乎没有太大区别。我很想弄清楚如何让动态字段按我的预期工作。

先感谢您。

4

1 回答 1

3

您的问题是“名称”字段被复制到“文本”字段(而不是 *_t)。如果您未指定键名,则“文本”被声明为要搜索的默认字段。因此,如果您执行类似 q=what to search 的操作,它将搜索“文本”字段(包括“名称”)。

在默认的 schema.xml 中,您会找到这些说明。(Solr 4.4 和 4.5)

stored="false" 是您在 solr 响应中看不到该字段值的原因。

<field name="text" type="text_general" indexed="true" stored="false" multiValued="true"/>

在这里,名称被复制到文本中

<copyField source="name" dest="text"/>

正如您在 schema.xml 中注释的这些行中看到的那样,将“text”声明为 defaultSearch 字段位于 solrconfig.xml

< ! --Note: Un-commenting defaultSearchField will be insufficient 
if your request handler in solrconfig.xml defines "df", which takes precedence. 
That would need to be removed.
 <defaultSearchField>text</defaultSearchField> -->

所以..让我们去 solrconfig.xml 然后..

<requestHandler name="/select" class="solr.SearchHandler">
    <!-- default values for query parameters can be specified, these
        will be overridden by parameters in the request
     -->
 <lst name="defaults">
   <str name="echoParams">explicit</str>
   <int name="rows">10</int>
   <!--******TAKE A LOOK HERE *******-->
   <str name="df">text</str>
   <!--*****************************-->

 </lst>
... more stuff
</requestHandler>

如何解决您的问题?

在 schema.xml 中取消注释此行。将所有“*_t”也复制到“text”。

 <!-- <copyField source="*_t" dest="text" maxChars="3000"/> -->

OBS:您需要在此更改后重新建立索引。

于 2013-10-31T15:20:24.527 回答