Я установил solr-6.5.1
в свой Spring MVC Java Web Application
со ссылкой на следующую документацию: http://www.baeldung.com/apache-solrj
https://github.com/eugenp/tutorials/tree/master/apache-solrj/src/main/java/com/baeldung/solrjava
У меня есть POJO
, как показано ниже:
public class WebContentSearchHB
{
private int webContentDefinitionId;
private String pageTitle;
private String pageKwd;
private String pageDesc;
private int siteId;
private int applicationId;
private Date pageCreatedTime;
private Date pageUpdatedDate ;
private String webContentData;
private String webContentType;
private String category;
public int getWebContentDefinitionId()
{
return webContentDefinitionId;
}
@Field("webContentDefinitionId")
public void setWebContentDefinitionId(int webContentDefinitionId)
{
this.webContentDefinitionId = webContentDefinitionId;
}
public String getPageTitle()
{
return pageTitle;
}
@Field("pageTitle")
public void setPageTitle(String pageTitle)
{
this.pageTitle = pageTitle;
}
public String getPageKwd()
{
return pageKwd;
}
@Field("pageKwd")
public void setPageKwd(String pageKwd)
{
this.pageKwd = pageKwd;
}
public String getPageDesc()
{
return pageDesc;
}
@Field("pageDesc")
public void setPageDesc(String pageDesc)
{
this.pageDesc = pageDesc;
}
public int getSiteId()
{
return siteId;
}
@Field("siteId")
public void setSiteId(int siteId)
{
this.siteId = siteId;
}
public int getApplicationId()
{
return applicationId;
}
@Field("applicationId")
public void setApplicationId(int applicationId)
{
this.applicationId = applicationId;
}
public Date getPageCreatedTime()
{
return pageCreatedTime;
}
@Field("pageCreatedTime")
public void setPageCreatedTime(Date pageCreatedTime)
{
this.pageCreatedTime = pageCreatedTime;
}
public Date getPageUpdatedDate()
{
return pageUpdatedDate;
}
@Field("pageUpdatedDate")
public void setPageUpdatedDate(Date pageUpdatedDate)
{
this.pageUpdatedDate = pageUpdatedDate;
}
public String getWebContentData()
{
return webContentData;
}
@Field("webContentData")
public void setWebContentData(String webContentData)
{
this.webContentData = webContentData;
}
public String getWebContentType()
{
return webContentType;
}
@Field("webContentType")
public void setWebContentType(String webContentType)
{
this.webContentType = webContentType;
}
public String getCategory() {
return category;
}
@Field("category")
public void setCategory(String category) {
this.category = category;
}
}
Я не создавал ни одного файла schema.xml
и не редактировал существующий файл schema.xml
. Я вручную устанавливаю значения для каждого поля в POJO
и добавляю их в индекс Solr, используя свое приложение следующим образом:
solrClient = new HttpSolrClient.Builder(solrUrl).build();
solrClient.setParser(new XMLResponseParser());
WebContentSearchHB searcHB = new WebContentSearchHB();
//codes to set data
solrClient.addBean(searcHB);
solrClient.commit();
Я также добавил следующую зависимость maven в свой файл pom.xml
<dependency>
<groupId>org.apache.solr</groupId>
<artifactId>solr-solrj</artifactId>
<version>6.5.1</version>
</dependency>
Одно из моих полей в WebContentSearchHB class
с именем category
будет содержать разделенную запятыми строку идентификаторов различных категорий для этого контента. Пример данных будет выглядеть так, как показано ниже:
[
{"pageTitle":["Test page"],
"pageKwd":["Test page"],
"pageDesc":["Test page"],
"applicationId":[1],
"siteId":[5],
"category":["2,6,7,8"],
"pageCreatedTime":["2017-02-17T05:58:19.648Z"],
"pageUpdatedDate":["2017-06-12T03:46:45.489Z"],
"webContentDefinitionId":[4947],
"webContentType":["simplewebcontent.html"],
"id":"717821d9-989e-4c4f-b66a-8b5185ed88ca",
"webContentData":"test"],
"_version_":1570012287149801472}
]
здесь есть несколько категорий, добавленных в виде значений, разделенных запятыми. Теперь, когда я пытаюсь найти данные в поле категории следующим образом:
http://localhost::8983/solr/swcm_qa/select?indent=on&q=category:7*&wt=json
данные не возвращаются. Но если я буду искать следующим образом,
http://localhost::8983/solr/swcm_qa/select?indent=on&q=category:2*&wt=json
Возвращаются все строки, в которых 2
появляется в качестве первого значения в строке, разделенной запятыми. Как я могу найти строку среди значений, разделенных запятыми, в поле категории? Кроме того, как я могу указать, хранит ли поле несколько значений в виде строки, разделенной запятыми, в аннотации @Field
?