2012-10-17 48 views
0

如果我搜索"Movies 10"發現與Movies 10Solr的查詢僅匹配確切

名的文件。如果我搜索Movies 10返回沒有文件。

下面是我的架構:

<?xml version="1.0" encoding="UTF-8" ?> 
<schema name="entertainment" version="1.0"> 
    <types> 
     <!-- The StrField type is not analyzed, but indexed/stored verbatim. --> 
     <fieldType name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true"/> 
     <fieldType name="int" class="solr.TrieIntField" precisionStep="0" omitNorms="true" positionIncrementGap="0"/> 
     <fieldType name="uuid" class="solr.UUIDField" indexed="true"/> 
     <fieldType name="text_general" class="solr.TextField" positionIncrementGap="100"> 
     <analyzer type="index"> 
       <tokenizer class="solr.StandardTokenizerFactory"/> 
       <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /> 
       <!-- in this example, we will only use synonyms at query time 
       <filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/> 
       --> 
       <filter class="solr.LowerCaseFilterFactory"/> 
      </analyzer> 
      <analyzer type="query"> 
       <tokenizer class="solr.StandardTokenizerFactory"/> 
       <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /> 
       <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> 
       <filter class="solr.LowerCaseFilterFactory"/> 
      </analyzer> 
     </fieldType> 
    </types> 


    <fields> 
     <field name="uid" type="uuid" indexed="true" stored="true" default="NEW" /> 
     <field name="type" type="string" indexed="true" stored="true" required="true" /> 
     <field name="name" type="string" indexed="true" stored="true" required="true" /> 
     <field name="description" type="string" indexed="true" stored="true" required="false" />  
     <dynamicField name="movie_*" type="string" indexed="true" stored="true" /> 
     <dynamicField name="movie_review_*" type="string" indexed="true" stored="true" /> 
     <dynamicField name="movie_trailer_*" type="string" indexed="true" stored="true" /> 
     <dynamicField name="theater_*" type="string" indexed="true" stored="true" /> 
    </fields> 

    <!-- Field to use to determine and enforce document uniqueness. 
    Unless this field is marked with required="false", it will be a required field 
    --> 
    <uniqueKey>uid</uniqueKey> 

    <!-- field for the QueryParser to use when an explicit fieldname is absent --> 
    <defaultSearchField>name</defaultSearchField> 
    <!-- SolrQueryParser configuration: defaultOperator="AND|OR" --> 
    <solrQueryParser defaultOperator="OR"/> 
</schema> 

回答

5

爲了得到這樣的搜索行爲,你將需要改變的name的字段類型使用text_general,這樣的數值是記號化。通過將name當前定義爲字符串fieldType,將僅返回完全匹配。

0

字符串是逐字搜索的,因爲您的text_general映射到帶有Tokeniser的solr.TextField更適合。