如何解决如何访问 SearchComponent 子类中的字段分析器?
我有这样的组件:
public class TempComponent extends SearchComponent {
private static final Logger LOG = LoggerFactory.getLogger(SearchComponent.class);
@Override
public void prepare(ResponseBuilder rb) throws IOException {
LOG.info("Temp Component ---");
SolrIndexSearcher indexSearcher = rb.req.getSearcher();
IndexReader reader = indexSearcher.getIndexReader();
SolrParams params = rb.req.getParams();
String q = params.get(CommonParams.Q);
Query query = new TermQuery(new Term("name",q));
DocList matchDocs = indexSearcher.getDocList(query,null,100000,10000);
}
@Override
public void process(ResponseBuilder rb) throws IOException {
}
@Override
public String getDescription() {
return null;
}
}
在模式中,我为字段 name 设计了新的 fieldType。
<fieldType name="nameType" class="solr.TextField" positionIncrementGap="100" multiValued="false">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
<field name="name" type="nameType" multiValued="false" indexed="true"/>
如何在搜索到索引之前访问此 fieldType 的分析器并将其应用于 query(q)?
解决方法
public class TempComponent extends SearchComponent {
private static final Logger LOG = LoggerFactory.getLogger(SearchComponent.class);
@Override
public void prepare(ResponseBuilder rb) throws IOException {
LOG.info("Temp Component ---");
SolrIndexSearcher indexSearcher = rb.req.getSearcher();
IndexReader reader = indexSearcher.getIndexReader();
SolrParams params = rb.req.getParams();
String q = params.get(CommonParams.Q);
Analyzer analyzer = rb.req.getSchema().getField("name").getType().getQueryAnalyzer();
StandardQueryParser standardQueryParser = new StandardQueryParser();
standardQueryParser.setAnalyzer(analyzer);
Query query = standardQueryParser.parse(q,"name");
DocList matchedCategories = indexSearcher.getDocList(query,null,100000,10000);
}
@Override
public void process(ResponseBuilder rb) throws IOException {
}
@Override
public String getDescription() {
return null;
}
}
我找到了答案!很简单。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。