Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.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
Lucene 奇怪的查询行为需要一些调试帮助_Lucene_Solr - Fatal编程技术网

Lucene 奇怪的查询行为需要一些调试帮助

Lucene 奇怪的查询行为需要一些调试帮助,lucene,solr,Lucene,Solr,以下是模式的相互测试部分: <fieldType name="text_rev" class="solr.TextField" positionIncrementGap="100"> <analyzer type="index"> <tokenizer class="solr.WhitespaceTokenizerFactory"/> <filter class="solr.StopFilterFactory" ignoreC

以下是模式的相互测试部分:

    <fieldType name="text_rev" class="solr.TextField" positionIncrementGap="100">
  <analyzer type="index">
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
    <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="0"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt"/>
    <filter class="solr.ASCIIFoldingFilterFactory" />
    <filter class="solr.ReversedWildcardFilterFactory" withOriginal="true" maxPosAsterisk="3" maxPosQuestion="2" maxFractionAsterisk="0.33"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <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.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="0"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt"/>
    <filter class="solr.ASCIIFoldingFilterFactory" />
  </analyzer>
</fieldType>

我使用这个字段类型和一些标题包含“哈利波特”的产品得到了一个名为Title的字段

查询:“Title:Harry*”将返回0个结果,而“Title:Harry”将返回很多结果。 但问题是,“Title:Potter*”将返回与“Title:Potter”相同数量的结果

那么为什么“Title:Harry*”没有返回任何结果呢

编辑:我发现了一个使用以下查询的变通方法:“Title:“Harry*”” (注意使用“)

下面是查询标题:Harry,标题:Harry*,标题:“Harry*”的调试

标题:哈利

  <str name="rawquerystring">Title:Harry</str> 
  <str name="querystring">Title:Harry</str> 
  <str name="parsedquery">Title:harri</str> 
  <str name="parsedquery_toString">Title:harri</str> 
标题:哈利
标题:哈利
标题:哈里
标题:哈里
标题:哈利*

  <str name="rawquerystring">Title:Harry*</str> 
  <str name="querystring">Title:Harry*</str> 
  <str name="parsedquery">Title:Harry*</str> 
  <str name="parsedquery_toString">Title:Harry*</str> 
  <str name="rawquerystring">Title:"Harry*"</str> 
  <str name="querystring">Title:"Harry*"</str> 
  <str name="parsedquery">Title:harri</str> 
  <str name="parsedquery_toString">Title:harri</str> 
标题:哈利*
标题:哈里*
标题:哈里*
标题:哈里*
标题:“哈利*”

标题:“哈里*”
标题:“哈里*”
标题:哈里
标题:哈里
当我们查询“Title:Harry*”时,它实际上是对默认搜索字段的短语搜索

这就是它如何被处理并被分配到默认搜索字段(在我的例子中是文本)的方式。 “用户名:harry*” “用户名:harry*” 短语查询(状态文本:“用户名”) 文本:“用户名harry”

“Title:Potter*”将返回与“Title:Potter”相同数量的结果 这听起来很奇怪,我猜两者都是0

我建议使用参数debugQuery=on来查看查询的解析方式。 “Title:Harry”返回结果,因为必须有包含该短语的文本。
希望这能有所帮助。原因是混合了小写FilterFactory和通配符查询。在索引时,这(当然)会将所有字母都小写,让“Harry”和“Harry”匹配


当您执行通配符查询时,如“Harry”*“,--即它不是小写的。您可以通过在客户端将查询小写来规避问题,只要您没有任何要求区分大小写。

我不知道您所说的是哪种查询。XSLT?SQL?还有别的吗?Solr/Lucene查询;)检查我试过的题:harry*它返回了一些结果,但不是我想要的。它只返回像“Harry/Nilsson”或“Ray Harryhausen set(5DVD)”这样的标题,其中Harry不是一个完整的单词。