如何在Solr查询中按自定义字段筛选结果?

如何在Solr查询中按自定义字段筛选结果?,solr,Solr,我需要一些自定义字段过滤器,用于我的Solr数据,如 { "id":"1", "name":"Test title", "language":"en" }, { "id":"2", "name":"Test title", "language":"fr" "parent": "1" } 我只需要通过查询获取第一项 /select?q=name:test 因此,我需要按父字段过滤结果,以便其中一个项出现在结果中。

我需要一些自定义字段过滤器,用于我的Solr数据,如

   {
    "id":"1",
    "name":"Test title",
    "language":"en"
    },
  {
    "id":"2",
    "name":"Test title",
    "language":"fr"
    "parent": "1"
    }
我只需要通过查询获取第一项

/select?q=name:test
因此,我需要按父字段过滤结果,以便其中一个项出现在结果中。
谢谢你的建议。

当我需要在Solr中进行查询时,我使用SearchQuery()并在其中设置filterQueries。有可能为我的搜索设置了过滤器

final String FIELD_NAME = "name_text_mv"; // name of my field in Solr
SearchQuery searchQuery = init(facetSearchConfig); // init configs
searchQuery.setFreeTextQueryBuilder(text); // set the text of my search
setFiltersFreeTextSearch(searchQuery.getFilterQueries(), text, FIELD_NAME);
制作魔术的功能(在我的搜索中添加我的过滤器):

private void setFiltersFreeTextSearch(列表过滤器、字符串文本、字符串…字段){
text=StringUtils.stripeAccents(text.toLowerCase();
字符串textCapitalized=capitaleAchWald(text.toLowerCase());
用于(字符串字段:字段){
QueryField QueryField=new QueryField(字段,SearchQuery.Operator.OR,SearchQuery.QueryOperator.CONTAINS,
text,text.toUpperCase(),text大写);
filters.add(queryField);
}
}
您可以看到,在这个查询字段中,您可以添加您在Solr中搜索的“Where's”。我使用的是CONTAINS,这是我查找任何项目的“LIKE”和“OR”

因此,基本上可以使用QueryField()为特定字段添加过滤器

好吧,这是我的解决方案,不管怎样,这只是一个想法。:)


(对于使用Java的projet)

您是只想显示父元素,还是想在子元素匹配时显示父元素?这里有什么不同吗?如果您只想显示那些没有父项的,请在查询中附加
和-parent:[*to*]
private void setFiltersFreeTextSearch(List<QueryField> filters, String text, String... fields) {
    text = StringUtils.stripAccents(text).toLowerCase();
    String textCapitalized = capitalizeEachWolrd(text.toLowerCase());
    for (String field : fields) {
        QueryField queryField = new QueryField(field, SearchQuery.Operator.OR, SearchQuery.QueryOperator.CONTAINS,
                text, text.toUpperCase(), textCapitalized);
        filters.add(queryField);
    }
}