2013-10-01 57 views
0

我在我的索引中列出了每个字段(text_general)中有几个单词的项目。例如。 “一到三个”。Solr,必须输入整个单词

我已经做了一个jQuery autosuggest查询我的索引,但我需要从我的text_field键入一个单词来获得回应。例如。 “一”。 “O”或“On”不会给我一个结果。

这已经在以前使用相同的设置,所以我不明白为什么它不再。我唯一真正改变的是我编入索引的数据,现在我的data-config.xml中有两个实体,而不是一个。

我抄几个领域的申请:

<field name="test" type="text_general" indexed="true" stored="false" multiValued="true"> 

(见下文)

我已经与多值发挥各地,但它似乎并没有成为问题。任何建议要看什么?

它是Solr 4.4。

数据-config.xml中

<entity name="product" dataSource="sqlServer" pk="ProductID" query="SELECT 
    ProductID, 
    ProductNumber, 
    ProductName, 
    ProductShortDescription, 
    ProductLongDescription, 
    ProductPrice, 
    ProductFeatures, 
    ProductSymbols, 
    ProductApplications 
    FROM EcomProducts"> 

    <field column="ProductID" name="Id"/> 
    <field column="ProductNumber" name="ProductNumber"/> 
    <field column="ProductName" name="Name"/>   
    <field column="ProductShortDescription" name="ProductShortDescription"/> 
    <field column="ProductLongDescription" name="ProductLongDescription"/> 
    <field column="ProductPrice" name="ProductPrice"/> 
    <field column="ProductFeatures" name="ProductFeatures"/> 
    <field column="ProductSymbols" name="ProductSymbols"/> 
    <field column="ProductApplications" name="ProductApplications"/> 
</entity> 

<entity name="tip" dataSource="sqlServer" pk="Id" query="SELECT 
    Id, 
    TipsContentHeader, 
    TipsContentText, 
    TipsPageId 
    FROM ItemType_TipsFifContent"> 

    <field column="Id" name="Id"/> 
    <field column="TipsContentHeader" name="Name"/> 
    <field column="TipsContentText" name="TipsContentText"/> 
    <field column="TipsPageId" name="TipsPageId"/> 
</entity> 

schema.xml中

<field name="Id" type="text_general" indexed="true" stored="true" required="true" /> 
<field name="Name" type="text_general" indexed="true" stored="true" required="false" multiValued="false" /> 

<field name="TipsContentText" type="text_general" indexed="true" stored="true" required="false" multiValued="false" /> 
<field name="TipsPageId" type="text_general" indexed="true" stored="true" required="false" /> 

<field name="ProductNumber" type="text_general" indexed="true" stored="true" required="false" /> 
<field name="ProductShortDescription" type="text_general" indexed="true" stored="true" required="false" multiValued="false" /> 
<field name="ProductLongDescription" type="text_general" indexed="true" stored="true" required="false" multiValued="false" /> 
<field name="ProductPrice" type="float" indexed="true" stored="true" required="false" /> 
<field name="ProductFeatures" type="text_general" indexed="true" stored="true" required="false" /> 
<field name="ProductSymbols" type="text_general" indexed="true" stored="true" required="false" /> 
<field name="ProductApplications" type="text_general" indexed="true" stored="true" required="false" /> 


    <field name="text" type="text_general" indexed="true" stored="false" multiValued="true"/> 

<copyField source="Name" dest="text"/> 
<copyField source="TipsContentText" dest="text"/> 
<copyField source="ProductShortDescription" dest="text"/> 
<copyField source="ProductLongDescription" dest="text"/> 

<defaultSearchField>text</defaultSearchField> 
+1

什么是发送到solr的查询? –

+1

你可以粘贴“text_general”的fieldType定义吗? – Aeham

+0

我的猜测是'text_general'有一个按单词索引的'WhiteSpaceFilter',但你正在寻找'NGram'过滤器? –

回答

0

我不会推荐NGram tokenzier。这会增加你的索引大小dramaticaly。你能告诉我们你的solr查询目前的样子吗? 问题是,你不会在你的查询中进行通配符搜索,如o *或on *

+1

你完全正确!我在我的代码中更改了查询,并在查询的开头和结尾处删除了通配符。再次插入(* q *)后,它现在再次运行,谢谢! – egeek

0

您需要使用N元等你发现的字母,而不是全字匹配。你可以找到一个例子here