繁体   English   中英

需要查询带有空白的Solr查询数据

[英]Solr query data with white space needs to be queried

我是新来的solr。 我在solr中有类似“ name”:“ John Lewis”之类的数据 查询形成的外观和搜索效果完美,为fq = name%3A +%22John + Lewis%22。这是在Solr控制台中形成的,效果很好。

我的要求是搜索来自我的Java层的特定单词“ JohnLewis” 在solr repo中必须将其映射为“ John Lewis”。

此搜索不仅限于名称字段(两个字和一个空格)。 我还有其他一些详细信息,例如“现金奖励信用卡” ,它有4个字,用户会查询类似“ CashRewardCreditCards”

如果可以使用solr中可用的任何解析器在schema.xml中进行处理,那么有人可以帮助我。

您需要创建自定义fieldType。

首先在您的Solr模式中定义一个fieldType:

<fieldType name="word_concate" class="solr.TextField" indexed="true" stored="false">
    <analyzer>
        <charFilter class="solr.PatternReplaceCharFilterFactory" pattern="\s*" replacement=""/>
        <tokenizer class="solr.StandardTokenizerFactory"/>
    </analyzer>
</fieldType>

在这里,我们将fieldType命名为word_concate
我们使用了CharFilterFactories的solr.PatternReplaceCharFilterFactory

字符过滤器是对输入字符进行预处理的组件。 字符过滤器可以像令牌过滤器一样链接在一起,并放置在令牌生成器的前面。 PatternReplaceCharFilterFactory过滤器使用正则表达式替换或更改字符模式

模式: \\s*表示零个或多个空格字符

其次创建一个以word_concate作为类型的字段:

<field name="cfname" type="word_concate"/>

使用复制字段将您的姓名字段复制到cfname

<copyField source="name" dest="cfname"/>

第三重新索引数据。

现在您可以查询: cfname:"JohnLewis"它将返回名称John Lewis

假设您的输入是CamelCase,如图所示,我将使用Solr的Word Delimiter Filter,并在分析器的查询侧将splitOnCaseChange参数作为起点。 这将使用输入令牌,例如CashRewardCreditCards并生成令牌Cash Reward Credit Cards

也可以看看:

https://cwiki.apache.org/confluence/display/solr/Filter+Descriptions#FilterDescriptions-WordDelimiterFilter

看一下WordDelimiterFilterFactory

它具有splitOnCaseChange属性。 如果将其设置为1,JohnLewis将被索引为John Lewis。

您需要将此添加到查询分析器。 如果用户搜索JohnLewis,则搜索结果将翻译为John Lewis。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM