Apache Solr替换"前缀"与模式

时间:2016-10-19 21:52:54

标签: solr lucene

这是设置。

  1. 从mysql select NULLIF(id,'') as unID <continue with other things..>

  2. 查询
  3. 在schema.xml中,<field name='unID' type='unIDType' index... />

  4. 同样在schema.xml中,

  5. <fieldType name="unIDType" class="solr.TextField"> <analyzer> <tokenizer class="solr.PatternTokenizerFactory" pattern="^([A-Z]{2})?([0-9]{5})$" group="2"/> </analyzer> </fieldType>

    1. 同样在schema.xml
    2. <copyField source='unID' dest='_text_' />

      ======

      结果:

      来自mysql的

      unID
      ID00001
      ID00002
      ID00003
      ID00004
      .
      .
      .
      

      规则是它始终以ID作为前缀,并且始终为5 digits

      用户只想搜索00001并获得该记录的答案。

      我的PatternTokenizerFactory有效。

      如果我搜索unID:10001,我会得到ID10001的记录。

      但我无法将其置于默认搜索字段,因为仅查询q=10001不起作用。 q=unID:10001有效。

      编辑1:我也试过了Pattern Filter Factory。它也没有用。

      我认为问题是新的价值&#34; 00001&#34;不是默认搜索字段,而是&#34; ID00001&#34;是。

      我读到分析是在它们全部标记为默认搜索字段后完成的。可能是我读错了?

      =======

      感谢。

2 个答案:

答案 0 :(得分:0)

如果要更改默认搜索字段(Solr不会自动更改),您可以在调用查询解析器时包含要搜索的字段名称。

对于Standard Query Parserdf(&amp; df = unID)

the DisMax and eDisMax Query Parsersqf(&amp; qf = unID)。

默认搜索字段由schema.xml中的设置确定:

<defaultSearchField>unID</defaultSearchField>

或来自请求处理程序中的定义:

<lst name="defaults">
    <str name="df">unID</str>
</lst>

答案 1 :(得分:0)

当您执行copyField指令时,结果字段(_text_)具有自己的分析器链,并不关心源字段的作用。您可能希望转而使用eDisMax,因为它允许搜索多个字段,而不是全部字段。