我想为我的标记功能添加自动完成功能。
几个问题:
如何生成包含前缀和字符串中间匹配项的自动完成建议列表?例如,如果用户键入“auto”,则自动完成建议应包括“自动完成”和“构建自动化”等术语。
我想允许多词标签并使用逗号(“,”)作为标签的分隔符。所以当用户按下空格键时,他仍然在输入相同的标签,但是当他按下逗号键时,他正在开始一个新的标签。我怎么做?
我正在使用 Django、jQuery、MySQL 和 Solr。实现上述 2 个功能的最佳方法是什么?
我想为我的标记功能添加自动完成功能。
几个问题:
如何生成包含前缀和字符串中间匹配项的自动完成建议列表?例如,如果用户键入“auto”,则自动完成建议应包括“自动完成”和“构建自动化”等术语。
我想允许多词标签并使用逗号(“,”)作为标签的分隔符。所以当用户按下空格键时,他仍然在输入相同的标签,但是当他按下逗号键时,他正在开始一个新的标签。我怎么做?
我正在使用 Django、jQuery、MySQL 和 Solr。实现上述 2 个功能的最佳方法是什么?
我已经完全实现了您的要求,并且效果很好。有两个问题需要注意:
与前面的答案一样,我将从上面链接的同一篇文章开始,但您确实需要 Edge NGram 分析器。您要添加的内容是还进行空白标记化。
然后您将对 schema.xml 文件进行这些更改。此示例假设您已经定义了一个名为“title”的字段,并且它也是您想要显示的内容。我创建了第二个字段,它仅用于自动完成前缀匹配。
第 1 步:定义 Edge NGram 文本字段类型
<types>
<!-- ... other types ... -->
<!-- Assuming you already have this -->
<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
... normal text definition ...
</fieldType>
<!-- Adding this -->
<fieldType name="prefix_edge_text" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<!-- not using enablePositionIncrements="true" for now -->
<filter class="solr.StopFilterFactory" words="stopwords.txt" />
<filter class="solr.EdgeNGramFilterFactory" minGramSize="1" maxGramSize="25" />
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<!-- No need to create Edges here -->
<!-- Don't want stopwords here -->
</analyzer>
</fieldType>
</types>
第 2 步:定义新字段
<fields>
<!-- ... other fields ... -->
<!-- Assuming you already have this -->
<field name="title" type="text" indexed="true" stored="true" multiValued="true"/>
<!-- Adding this -->
<field name="prefix_title" type="prefix_edge_text" indexed="true" stored="true" multiValued="true" />
</fields>
第 3 步:在索引期间将标题的内容复制到前缀字段
<!-- Adding this -->
<copyField source="title" dest="prefix_title" />
架构就差不多了。只要记住: