Ajax 如何生成非前缀自动完成建议?
我想将自动完成添加到我的标记功能中 有几个问题:Ajax 如何生成非前缀自动完成建议?,ajax,autocomplete,solr,jquery-autocomplete,Ajax,Autocomplete,Solr,Jquery Autocomplete,我想将自动完成添加到我的标记功能中 有几个问题: 如何生成包含前缀和字符串中间匹配项的自动完成建议列表?例如,如果用户键入“auto”,则自动完成建议应包括“autocomplete”和“buildautomation”等术语 我希望允许多单词标记,并使用逗号(“,”)作为标记的分隔符。因此,当用户点击空格键时,他仍然在键入相同的标记,但当他点击逗号键时,他开始了一个新的标记。我该怎么做 我正在使用Django、jQuery、MySQL和Solr。实现上述两个功能的最佳方法是什么 使用。使用查看
我已经完全实现了您的要求,而且效果非常好。有两个问题需要注意:
- 在结果列表摘要中突出显示不起作用,建议的解决方法在这种特殊情况下也不起作用
- 如果您的文档标题很长,并且在显示时将其截断,则有可能与未显示的单词的前缀匹配。当然有几种处理方法
- 在未来的版本中,我希望标题开头的文字比结尾的文字更重要一些。这将是缓解前一项问题的一种方法
<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" />
对于模式来说,这差不多就是它。记住:
- 当您进行常规搜索时,您仍然会根据常规标题字段进行搜索
- 进行自动完成搜索时,请根据前缀\u标题进行搜索
- 在结果列表摘要中突出显示不起作用,建议的解决方法在这种特殊情况下也不起作用
- 如果您的文档标题很长,并且在显示时将其截断,则有可能与未显示的单词的前缀匹配。当然有几种处理方法
- 在未来的版本中,我希望标题开头的文字比结尾的文字更重要一些。这将是缓解前一项问题的一种方法
<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" />
对于模式来说,这差不多就是它。记住:
- 当您进行常规搜索时,您仍然会根据常规标题字段进行搜索
- 进行自动完成搜索时,请根据前缀\u标题进行搜索