这是设置。
从mysql select NULLIF(id,'') as unID <continue with other things..>
在schema.xml中,<field name='unID' type='unIDType' index... />
同样在schema.xml中,
<fieldType name="unIDType" class="solr.TextField">
<analyzer>
<tokenizer class="solr.PatternTokenizerFactory" pattern="^([A-Z]{2})?([0-9]{5})$" group="2"/>
</analyzer>
</fieldType>
<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;是。
我读到分析是在它们全部标记为默认搜索字段后完成的。可能是我读错了?
=======
感谢。
答案 0 :(得分:0)
如果要更改默认搜索字段(Solr不会自动更改),您可以在调用查询解析器时包含要搜索的字段名称。
对于Standard Query Parser:df
(&amp; df = unID)
the DisMax and eDisMax Query Parsers:qf
(&amp; qf = unID)。
默认搜索字段由schema.xml
中的设置确定:
<defaultSearchField>unID</defaultSearchField>
或来自请求处理程序中的定义:
<lst name="defaults">
<str name="df">unID</str>
</lst>
答案 1 :(得分:0)
当您执行copyField指令时,结果字段(_text_)具有自己的分析器链,并不关心源字段的作用。您可能希望转而使用eDisMax,因为它允许搜索多个字段,而不是全部字段。