1

我在 solr 中有以下文档

<doc>
  <str name="PackageName">A lot of devices on one drawing </str>
  ...

架构将 PackageName 定义为

<field name="PackageName" type="text_general_edge_ngram" indexed="true" stored="true" required="true"/>

在哪里

<fieldType name="text_general_edge_ngram" class="solr.TextField" positionIncrementGap="100">
    <analyzer type="index">
        <tokenizer class="solr.LowerCaseTokenizerFactory"/>
        <filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15" side="front"/>
    </analyzer>
    <analyzer type="query">
        <tokenizer class="solr.LowerCaseTokenizerFactory"/>
    </analyzer>
</fieldType>

现在,我想设置一个查询,当用户查询时

 http://...:8983/solr/vault/select?q=PackageName:"A lot"

它会回来但是

 http://...:8983/solr/vault/select?q=PackageName:"B lot"

不会回来和

目前

 http://...:8983/solr/vault/select?q=PackageName:B lot

 http://...:8983/solr/vault/select?q=PackageName:A lot  

重新调整文档,并用 " 包围它在这两种情况下都不会返回任何内容。
如何更改我的查询?
谢谢。

4

1 回答 1

1

EdgeNGramFilterFactory 将删除小于为 minGramSize 定义的大小的令牌,在您的情况下定义为 2。检查JIRA
此外,当您查询packageName:"A Lot"搜索词时,会在字段 packageName 上进行搜索。
但是,当您搜索packageName:A LotSolr 时,将搜索packageName:a defaultField:lot似乎与您的情况相匹配的内容。

于 2013-09-10T12:29:46.713 回答