2015-07-21 55 views
1

林建设使用SOLR 5.2的应用程序,我需要这种类型的比赛:SOLR匹配短语(卵石FILTER)

,如果我有存储字段名称:” BLA1 bla2‘和名称:’bla2东西bla3“ 当我查询类似名称的东西:”东西bla1 bla2东西bla3 bla4“ 我需要它匹配两个条款

所以我落得这样做是定义这种类型的字段:

我使用关键字标记生成器为索引

我用空白标记生成器和瓦滤波器查询,所以我得到这样的 “喇嘛TRA KLA ZLA CLA” 输出 “BLA TRA”, “喇嘛TRA科军”, “喇嘛TRA KLA ZLA” .... ...

我已经尝试过分析和shingling工作正常,但问题是当我执行我的查询与真正的数据它似乎没有找到匹配。

<fieldType name="shingleparse" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer type="index"> 
    <tokenizer class="solr.KeywordTokenizerFactory"/> 
    </analyzer> 
    <analyzer type="query"> 
<tokenizer class="solr.WhitespaceTokenizerFactory"/>  
<filter class="solr.ShingleFilterFactory" outputUnigrams="false" outputUnigramsIfNoShingles="true" minShingleSize="2" maxShingleSize="5"/> 
    </analyzer> 
</fieldType> 

<field name="name" type="shingleparse" indexed="true" stored="true" required="true" multiValued="false" /> 
+1

[关键词标记生成器(https://cwiki.apache.org/confluence/display/solr/Tokenizers#Tokenizers-KeywordTokenizer)将整个文本字段作为一个单一令牌。因此,当您将数据编入索引时,可以看到像单个标记'bla2 something bla3'。 – alexf

+0

这正是它应该如何处理,因为例如,如果我查询smth像“** bla2东西bla3 bla4 bla5 **”我会得到带状疱疹“** bla2东西**”,“** bla2东西bla3 * *“,...它应该匹配,但由于某种原因,它不会 – BrainOverflow

+0

因此,在您的示例中,**第一个**('bla1 bla2')匹配,而不是**第二个**('bla2 something bla3')? – alexf

回答

0

你可以检查这是否符合你的要求。

<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"/> 
     <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> 
+0

这不解决我的问题,如果我例如查询确切的单词“** bla1 bla2 **”它匹配,但如果我查询名称:“** bla1 bla2 ttttttt **”这不匹配,我想它匹配 – BrainOverflow

+0

它会匹配...检查这些在分析页面http://localhost/solr/admin/analysis.jsp –

+0

我试过第二个以及它匹配上述字段类型 –