我使用以下字段类型查询solr的问题:

<fieldType name="text_ci" class="solr.TextField" positionIncrementGap="100">
   <analyzer>
      <tokenizer class="solr.WhitespaceTokenizerFactory"/>
      <filter class="solr.LowerCaseFilterFactory"/>
      <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true"/>
       <filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt"/>
   </analyzer>
</fieldType>
.

您可以看到它在索引和查询时应用“snowballporterfilterfactory”。如果我索引类似于

鼠标和乐趣

它被索引为:

如您所见,“鼠标”这个词被“SnowballPorterFilterfactory”变成了“Mous”。这是我们想要的。但是,当我们搜索

鼠标*

似乎以同样的方式应用“Snowballporterfilterfactory”。我猜是因为最后的*。

我的问题是..有没有办法制作“Snowballporterfilterfactory”了解通配符吗?所以当我查询

鼠标*

我没有得到0个结果。

有趣的是,如果我查询

mous *

记录确实回来了。

或者有人可以提供更好的方法来查询/索引这种类型的字段吗?

谢谢Dave

有帮助吗?

解决方案

常见问题

与其他类型的Lucene查询,通配符,前缀和模糊查询未通过分析仪,这是执行诸如诸如诸如诸如诸如Stemming和Dowliccasing之类的操作的组件。跳过分析仪的原因是,如果你正在寻找“狗*”,你不会想要“狗”第一个源于“狗”,因为那将匹配“狗*”,这不是预期的查询。无论如何,这些查询都是不敏感的,因为QueryParser使它们小写。可以使用setlowercaseexpandedterms(布尔)方法

更改此行为

如果您对更改索尔源更改,请 solr-757 有一个附加的补丁,您可能会发现它有用。我不知道除了潜入来源之外的方法也不知道。

什么可能是一个更简单的想法:只需具有不源的副本字段。用户可以搜索两个字段,然后鼠标*将匹配在非倾斜字段中。

(编辑:实际上,看看那个补丁,我不确定它会做你想要的。但基本上你只需要将你的查询处理程序改为首先签名。)

其他提示

上次我检查,当您使用通配符时,不使用查询分析器。因此,由于您使用的是低级Filterfactory,因此您的术语以小写索引索引并搜索Mous *不会返回任何内容。

我认为使用通配符时唯一要做的是要确保将查询调整到索引术语的方式(以类似于您的查询分析仪为什么会做的方式)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top