索尔,必须输入全文

时间:2013-10-01 22:19:28

标签: xml solr

我的索引中有项目,每个字段中有几个单词(text_general)。例如。 “一到三四”。

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

以前使用相同的设置已经有效,所以我无法弄清楚为什么它不再存在。我真正改变的是我索引的数据,我现在在data-config.xml中有2个实体,而不是一个。

我已将多个字段复制到该字段:

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

(见下文)

我玩过multiValue,但似乎没有问题。有什么建议要看吗?

这是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>

2 个答案:

答案 0 :(得分:0)

你需要使用N-Grams,这样才能找到字母而不是整个单词的匹配。您可以找到示例here

答案 1 :(得分:0)

我不推荐使用NGram令牌。这将显着增加您的索引大小。你能告诉我们你的solr查询目前是什么样的吗? 问题是您不在查询中进行通配符搜索,如o *或*