Javascript Dijit.form.Combobox QueryExpr

Javascript Dijit.form.Combobox QueryExpr,javascript,dojo,dijit.form,Javascript,Dojo,Dijit.form,我目前正在项目中使用Dojo的ComboBox进行自动完成。ComboBox的数据是通过Solr提供的,因此它只包含Solr认为最接近的10个匹配项。当涉及到中间的首字母时,组合框变得非常混乱,例如: “希尔”将与“亚当·希尔”匹配 “亚当”将与“亚当·希尔”、“亚当·E·格雷”等匹配 但是如果我输入“Adam E”或“Adam Gray”,我不会得到匹配结果。我当前的queryExpr是: *{0}* 我不知道如何进行局部匹配,有什么建议吗?先回答你的最后一个问题。。。你不能。Solr没有进

我目前正在项目中使用Dojo的ComboBox进行自动完成。ComboBox的数据是通过Solr提供的,因此它只包含Solr认为最接近的10个匹配项。当涉及到中间的首字母时,组合框变得非常混乱,例如:

“希尔”将与“亚当·希尔”匹配 “亚当”将与“亚当·希尔”、“亚当·E·格雷”等匹配

但是如果我输入“Adam E”或“Adam Gray”,我不会得到匹配结果。我当前的queryExpr是:

*{0}*

我不知道如何进行局部匹配,有什么建议吗?

先回答你的最后一个问题。。。你不能。Solr没有进行前导和尾随通配符搜索的功能。但是,根据您的模式设置(单个术语是如何生成的)以及您查询索引的方式,您可能能够进行适当的近似

我在这里做了很多假设,因为这个问题不能很好地描述你的设置

假设:

  • 您要查询的字段包含唯一值(这使我们能够执行简单的查询。否则,我们必须执行方面查询以返回唯一值,这有点复杂)
  • 您正在使用的solr版本支持eDismax查询解析器
模式:

为了将“Adam E”和“Adam Gray”与“Adam E Gray”匹配,您需要两个字段,分别是fullName(例如“Adam E Gray”)和firstNameLastName(例如“Adam Gray”) 这些字段都应编制索引,并且无论您希望填充filteringSelectBox的哪个字段都应使用文本数据类型存储(即使用“solr.WhitespaceTokenizerFactory”标记器)。使用此标记器将允许“E Gray”与“Adam E Gray”匹配

查询字符串

q={!edismax qf='fullName firstNameLastName'}$name*&fl=fullName&rows=$count&start=$start 哪里: -$name是要匹配的字符串。它不必是完整的名称,但字符串必须以搜索词的开头开始。即“Adam e Gr”正常(星号允许尾随通配符搜索),“dam e Gray”不正常。 -$count和$rows由readStore设置