Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ApacheSolr-如何在搜索短语时防止拆分_Java_Solr_Lucene - Fatal编程技术网

Java ApacheSolr-如何在搜索短语时防止拆分

Java ApacheSolr-如何在搜索短语时防止拆分,java,solr,lucene,Java,Solr,Lucene,我有以下字段类型: <fieldType name="textfield" class="solr.TextField" positionIncrementGap="100"> <analyzer type="index"> <charFilter class="solr.HTMLStripCharFilterFactory"/> <tokenizer class="solr.WhitespaceTokenizerFactory"/

我有以下字段类型:

<fieldType name="textfield" class="solr.TextField" positionIncrementGap="100"> 
  <analyzer type="index">
    <charFilter class="solr.HTMLStripCharFilterFactory"/>
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.TrimFilterFactory"/>
    <filter class="solr.LengthFilterFactory" min="3" max="30"/>
    <!-- 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.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1"
            catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/>
    <filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt"/>
    <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.LengthFilterFactory" min="3" max="30"/>
    <!--<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>-->
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.TrimFilterFactory" />
    <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1"
            catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/>
    <filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt"/>
  </analyzer>
</fieldType>

我遇到的问题是,当使用引号搜索短语时,结果与没有引号的结果相同,因此如果我搜索,让我们说:
美国广播公司。8
这将显示与
相同的结果 “abc.8”
这一时期是否也可以分割文本

换句话说,我只想在引用查询文本时搜索短语。
Thx.

您已将
长度过滤器工厂
合并到分析仪中,最小长度为3。标记
8
的长度为1,因此该筛选器将从索引和查询中删除该标记。您的查询语法是正确的,如果两个术语都被索引,那么将按照您指定的方式执行短语查询。

有没有办法避免在查询中标记短语?我的意思是,在搜索“abc.8”时,我希望将其视为5个字符的单个标记,因此8不会从查询中删除。这将使搜索变得非常困难,因为索引中的标记化仍然是标记化的。您可以使用单个标记创建查询
abc。8
,但您的索引仍然只有令牌
abc.
。如果您希望能够找到标记
8
,我想最小长度对您没有任何好处。如果您确实需要支持不同的标记化方案,最好的解决方案是在不同名称的字段中索引两个不同版本的文本。