首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >你能在spring-data-solr中修改字符转义吗?

你能在spring-data-solr中修改字符转义吗?
EN

Stack Overflow用户
提问于 2014-04-30 19:29:23
回答 1查看 1.3K关注 0票数 2

我们在模式中存储一个路径,以斜杠分隔,并且它也以斜杠开头。根据this post的说法,solr在4.0版之后将查询开头的斜杠解释为正则表达式,这意味着我们需要转义斜杠。

但是SolrTemplate.queryForPage(Query, Class)无法避开斜杠,因此自然的解决方案是使用上面链接中建议的QueryParser.escape(searchTerm)。

但是,这将添加一个反斜杠来转义斜杠,该反斜杠将由SolrTemplate进行转义,从而导致查询中出现转义反斜杠-这不会给出任何结果

为了清楚起见,我将添加几个示例:

不带任何转义的查询:

代码语言:javascript
复制
q=paths:/myrootpath&start=0&rows=10

手动转义斜杠的查询(QueryParser.escape(String)):

代码语言:javascript
复制
q=paths:\\/myrootpath&start=0&rows=10

我需要的查询:

代码语言:javascript
复制
q=paths:\/myrootpath&start=0&rows=10

我不确定这是一个bug还是故意的,因为据我所知,4.0-solr之前的版本不需要转义斜杠

那么在spring-data-solr中有没有办法禁用查询的字符转义,或者修改哪些字符转义呢?

EN

回答 1

Stack Overflow用户

发布于 2016-06-21 18:50:37

我喜欢使用转换器的想法。我们可以添加新的类ContentPath:

代码语言:javascript
复制
@AllArgsConstructor
@ToString
@Getter
public class ContentPath {
    private String path;
}

然后在创建SolrTemplate时需要注册新的转换器:

代码语言:javascript
复制
SolrTemplate solrTemplate = ...
DefaultQueryParser defaultQueryParser = new DefaultQueryParser();
defaultQueryParser.registerConverter(new Converter<ContentPath, String>() {

    @Override
    public String convert(ContentPath o) {
        return escape(o.getPath());
    }

});
solrTemplate.registerQueryParser(Query.class, defaultQueryParser);

查询定义时需要做最后一次更改:

代码语言:javascript
复制
new SimpleQuery((new Criteria(IDENTIFIER)).is(new ContentPath(id)));
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23386925

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档