为什么动态字段在solr中不像普通字段(特别是在Hue中查询和显示时)那样?

时间:2013-10-30 17:19:03

标签: xml solr field solrj hue

在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"/>

这些设置与正常字段“name”完全相同,该字段是令牌可搜索的,并出现在色相中的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 Search面板并执行默认空白搜索将返回Solr db中所有数据的第一页。

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 Query窗口中以相同的方式搜索数据。如果我输入“borough_t:QUEENS”,我会在Hue和Solr Query中得到所有结果,其中确切的字段和值匹配。这不允许令牌匹配,并且不符合声明的动态字段或上面给出的属性的预期行为。我正在使用在collection1中为Solr提供的示例schema.xml。我已经检查过以确保没有任何其他动态字段与glob“* _t”冲突,并在设置时否定或错误字段。

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

NYC Open Data Site拉出的我的XML数据示例将无法正确格式化,但如果您真的感兴趣,可以查看Firehouse位置和涂鸦位置数据并导出xml。这就是我投入Solr的数据。 我可以看到的解决方案似乎是编写硬编码的解释代码,它使用text_general设置将每个标记值分配给一个精确的字段,或者动态创建字段,这与动态字段似乎没什么不同。我想知道如何让动态字段按照我的期望工作。

提前谢谢。

1 个答案:

答案 0 :(得分:3)

您的问题是字段“name”正被复制到字段“text”(并且* _t not)。如果未指定键名,则“text”被声明为要搜索的默认字段。因此,如果您执行此类操作q =要搜索的内容,它将搜索“文本”字段(包括“名称”)。

在默认的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:您需要在此更改后重新编制索引。