使用Drupal7中的SearchAPI模块,使用autocomplete在ApacheSolr中搜索整个名称
我在ApacheSolr中索引了firstname和lastname。我的要求是当用户输入firstname时,在autocomplete中以“firstname lastname”的形式获取全名。为此,我为另一个名为fullname的字段编制了索引,该字段结合了firstname和lastname,中间有空格。我使用search\u api\u autocomplete模块实现了自动完成工作。但问题是。假设我想在自动完成建议中使用“Christian Bale”。当我输入'Christian'时,我得到了正确的建议,但当我输入空格输入'Bale'时,建议消失了。“我的全名”字段的类型为全文,而“名字”和“姓氏”字段的类型为字符串 我已经尝试了多种不同的标记器和过滤器,但无法找到它 这是我在schema.xml文件中的配置使用Drupal7中的SearchAPI模块,使用autocomplete在ApacheSolr中搜索整个名称,solr,autocomplete,drupal-7,solr-search,Solr,Autocomplete,Drupal 7,Solr Search,我在ApacheSolr中索引了firstname和lastname。我的要求是当用户输入firstname时,在autocomplete中以“firstname lastname”的形式获取全名。为此,我为另一个名为fullname的字段编制了索引,该字段结合了firstname和lastname,中间有空格。我使用search\u api\u autocomplete模块实现了自动完成工作。但问题是。假设我想在自动完成建议中使用“Christian Bale”。当我输入'Christian'
<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.StopFilterFactory"
ignoreCase="true"
words="stopwords.txt"
/>
<filter class="solr.WordDelimiterFilterFactory"
protected="protwords.txt"
generateWordParts="0"
generateNumberParts="0"
catenateWords="0"
catenateNumbers="0"
catenateAll="0"
splitOnCaseChange="0"
preserveOriginal="1"/>
<filter class="solr.LengthFilterFactory" min="1" max="100" />
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
</analyzer>
<analyzer type="query">
<charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.StopFilterFactory"
ignoreCase="true"
words="stopwords.txt"
/>
<filter class="solr.WordDelimiterFilterFactory"
protected="protwords.txt"
generateWordParts="0"
generateNumberParts="0"
catenateWords="0"
catenateNumbers="0"
catenateAll="0"
splitOnCaseChange="0"
preserveOriginal="1"/>
<filter class="solr.LengthFilterFactory" min="2" max="100" />
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
</analyzer>
<analyzer type="multiterm">
<charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.StopFilterFactory"
ignoreCase="true"
words="stopwords.txt"
/>
<filter class="solr.WordDelimiterFilterFactory"
protected="protwords.txt"
generateWordParts="1"
generateNumberParts="1"
catenateWords="0"
catenateNumbers="0"
catenateAll="0"
splitOnCaseChange="1"
preserveOriginal="1"/>
<filter class="solr.LengthFilterFactory" min="2" max="100" />
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt"/>
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
</analyzer>
</fieldType>
您的索引的标记器在哪里?您是否直接将此字段用于自动完成建议?在这种情况下,您如何查询它?我在粘贴时错过了标记器。我已经编辑过了。我在视图中使用全文搜索过滤器进行查询。是的,我直接使用全名字段来提供建议。另外,您能告诉我为什么删除小写筛选器工厂时建议停止工作吗?我不想用小写字母为字段编制索引。为什么不想用小写字母为字段编制索引?原因是。。这就是它不起作用的原因。如果不将字段小写,Foo
和Foo
将被视为不相等,因此大小写必须匹配。还有什么原因让你有一个显式的多项分析器?尽可能简化你的链,然后从中开始构建。你的索引分析器的标记器在哪里?您是否直接将此字段用于自动完成建议?在这种情况下,您如何查询它?我在粘贴时错过了标记器。我已经编辑过了。我在视图中使用全文搜索过滤器进行查询。是的,我直接使用全名字段来提供建议。另外,您能告诉我为什么删除小写筛选器工厂时建议停止工作吗?我不想用小写字母为字段编制索引。为什么不想用小写字母为字段编制索引?原因是。。这就是它不起作用的原因。如果不将字段小写,Foo
和Foo
将被视为不相等,因此大小写必须匹配。还有什么原因让你有一个显式的多项分析器?尽可能简化你的链条,然后从中开始构建。