gpt4 book ai didi

java - 需要在 java api 中的 Solr 搜索中搜索文本及其周围的几行

转载 作者:行者123 更新时间:2023-12-01 18:29:33 26 4
gpt4 key购买 nike

我正在使用 solr 7.7.2,并且我使用 solrj 在 Solr 中编写了一个 Java 程序,该程序在一个巨大的文本文件中搜索单词。我使用以下代码来显示代表整个文本的搜索结果。

SolrQuery params = new SolrQuery();
params.setQuery("content:word for search");

如何仅显示该单词所在的一行文本?

所有代码都是这样的

public static void main(String args[]) throws SolrServerException, IOException
{
String urlString = "http://localhost:8983/solr/test_core";
SolrClient Solr = new HttpSolrClient.Builder(urlString).build();

SolrQuery params = new SolrQuery();
params.setQuery("content:word for search");

params.setSort("score", SolrQuery.ORDER.desc);

QueryResponse queryResponse = Solr.query(params);

SolrDocumentList result = queryResponse.getResults();
for (int i = 0 ; i < result.size(); i++ )
{
System.out.println(result.get(i) + " \n");
}
}

最佳答案

突出显示是solr功能之一。你必须传递查询参数来实现高亮,如下:-

hl – 设置为 true,它可以在查询响应中生成突出显示的片段。

hl.fl – 提及要突出显示的字段列表。 char * 将突出显示所有字段

hl.fragsize – 由荧光笔创建的片段(也称为片段)的大小(以字符为单位)。在原始荧光笔中,“0”表示应使用整个字段值,不分段。默认情况下片段大小为 100 个字符

通过添加以下代码进行检查。

params.setHighlight(true).setHighlightSnippets(1);
params.setParam("hl.fl", "*");
params.setParam("hl.fragsize", "0");

这里是完整的代码供您尝试。

注意:请忽略代码中硬编码的内容,就像硬编码的 url "solrUrl = "http://localhost:8983/solr ”和字符串“返回“Success””。这些应该从属性文件和常量文件中读取。希望您也这样做。切勿在生产代码中使用 System out。

public String getResult() throws SolrServerException, IOException {

final SolrClient client = getSolrClient();
ModifiableSolrParams params = new ModifiableSolrParams ();


params.set ("q", "comment_t:pizza");
params.set ("fl", "id, comment_t");
params.set ("sort", "id asc");
params.set("hl", true);
params.set("hl.q", "pizza");
params.set("hl.simple.pre", "<strong>");
params.set("hl.simple.post", "</strong>");
params.set("hl.fl", "comment_t");
params.set("hl.fragsize", "100");

final QueryResponse response = client.query("demo", params);
response.getHighlighting();

final SolrDocumentList documents = response.getResults();

System.out.println("Found " + documents.getNumFound() + " documents");
for (SolrDocument document : documents) {
final String id = (String) document.getFirstValue("id");
final String name = (String) document.getFirstValue("comment_t");

System.out.println("id: " + id + "; comment_t: " + name);

if(response.getHighlighting() != null){
System.out.println("highlighted text :: " + response.getHighlighting());
}
}
return "Success";
}



private SolrClient getSolrClient() {

final String solrUrl = "http://localhost:8983/solr";
return new HttpSolrClient.Builder(solrUrl).withConnectionTimeout(10000).withSocketTimeout(60000).build();
}

请找到输出的屏幕截图:

Highlighting output

关于java - 需要在 java api 中的 Solr 搜索中搜索文本及其周围的几行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60184256/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com