我是solr的新手,并创建了一个搜索xml文件的核心。搜索工作正常,但似乎并不完整。当我搜索索引文件时,例如使用“A”我得到一个结果,当我使用“ U ”时,即使有与搜索字符串匹配的记录,我也没有得到结果。你能给我一个暗示在哪里检查这个问题吗?在我看来,schema.xml和data-config.xml似乎已正确定义。
提前感谢您的任何建议!
fieldType是“text”,我在这里附加了schema.xml:
`<?xml version="1.0" encoding="UTF-8"?>
<schema name="example" version="1.5">
<uniqueKey>id</uniqueKey>
<fieldType name="date" class="solr.TrieDateField" positionIncrementGap="0" precisionStep="0"/>
<fieldType name="int" class="solr.TrieIntField" positionIncrementGap="0" precisionStep="0"/>
<fieldType name="long" class="solr.TrieLongField" positionIncrementGap="0" precisionStep="0"/>
<fieldType name="string" class="solr.StrField" sortMissingLast="true"/>
<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
<field name="_version_" type="long" indexed="true" stored="true"/>
<field name="idauftrunters" type="string" indexed="true" required="true" stored="true"/>
<field name="id" type="int" indexed="true" stored="true"/>
<field name="patientname" type="text" indexed="true" stored="true"/>
</schema>`
萨宾
答案 0 :(得分:0)
对于名为Johnny U Dawg的人,您的查询应返回结果。
对于名为Johnny U. Dawg的人,您可能需要添加ClassicFilterFactory或LetterTokenizerFactory,并且应该返回结果。
但是,根据我的理解,当您使用 U
查询时,您希望显示“Jes u s Gamez”这在SOLR中并不简单,最接近此功能的是EdgeNGramFilterFactory,但它只需要第一个字母作为您期望的标记。
实现这一目标的一种方法是编写scriptTransformer(在您的数据配置xml中)并将名称分成每个字母,如this,但在Javascript中。 并将其存储在与您的名称字段(例如命名空间)不同的字段中,并使用copyField将此命名空间添加到文本字段中。