Dijit.form.Combobox QueryExpr

时间:2011-10-10 16:34:43

标签: javascript dojo dijit.form

我目前正在使用Dojo的ComboBox在我的项目中自动完成。 ComboBox的数据是通过Solr提供的,因此它只包含solr认为的10个最接近的匹配项。 ComboBox在Middle Initials方面变得异常混乱,例如:

“希尔”将匹配“亚当希尔” “Adam”将匹配“Adam Hill”,“Adam E Gray”等等。

但如果我输入“Adam E”或“Adam Grey”,我就不会回来了。我当前的queryExpr是:

*{0}*

我无法弄清楚如何进行部分匹配,任何建议?

1 个答案:

答案 0 :(得分:0)

首先回答你的上一个问题......你做不到。 Solr没有执行前导和尾随通配符搜索的功能。但是,根据您的架构设置(如何生成单个术语)以及您查询索引的方式,您可以做一个不错的近似。

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

<强>假设:

  • 您要查询的字段包含唯一值(这使我们能够进行简单的查询。否则,我们必须进行构面查询以返回更复杂的唯一值)
  • 您使用的solr版本支持eDismax查询解析器

<强>架构:

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

查询字符串

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