2016-12-26 7 views
0

Apache Lucene을 처음 사용합니다. 저는 최신 버전 인 facet 라이브러리와 함께 6.3.0을 사용하고 있습니다. 내가 GitHub의에서 발견 된 사례를 바탕으로 : https://github.com/apache/lucene-solr/tree/master/lucene/demo/src/java/org/apache/lucene/demo/facetApache Lucene은 문서의 패싯 필드를 반환합니다.

나는 문서

Document doc = new Document(); 
doc.add(new FacetField("Author", "Bob")); 
doc.add(new FacetField("Publish Date", "2010", "10", "15")); 
doc.add(new FacetField("Tags", "A")); 
doc.add(new FacetField("Tags", "B")); 

//[FacetField(dim=Author path=[Bob]), FacetField(dim=Publish Date path=[2010, 10, 15]), FacetField(dim=Tags path=[A]), FacetField(dim=Tags path=[B])] 
System.out.println(doc.getFields()); 

//null 
System.out.println(doc.getField("Author")); 

doc.getFields() 반환 모든 필드 다음,하지만 doc.getField("Author")는 null를 돌려줍니다. 내가 잘못하고 있니? 나는 이런 식으로 뭔가를 할 경우 더 파고

:

for(IndexableField myField:doc.getFields()){ 
    System.out.println(myField.name()); 
} 

인쇄입니다 :

dummy 
dummy 
dummy 
dummy 

을 그리고 나는이 doc.getField("dummy") 뭔가를 할 경우 실제로 첫 번째 필드 (저자)을 반환합니다 .

FacetField 소스 코드를 보면이 : https://github.com/apache/lucene-solr/blob/branch_6_3/lucene/facet/src/java/org/apache/lucene/facet/FacetField.java

public FacetField(String dim, String... path) { 
super("dummy", TYPE); 

이 버그가 : https://github.com/apache/lucene-solr/blob/branch_6_3/lucene/facet/src/java/org/apache/lucene/facet/FacetField.java 모든면 필드는 "더미"로 만든 것 같다?

답변

-1

제 생각에 저자의 값은 "Bob"으로 반환되어야합니다.

FacetField & 필드는 Lucene의 두 가지 유형의 필드이며 서로 다른 방식으로 데이터를 저장합니다. FacetField는 Field 클래스의 자손 클래스입니다. 필드를 초기화하려면 필드의 이름이 필요합니다. & 부울 값은 필드를 검색할지 여부를 나타냅니다.

공용 클래스 FacetField는

필드

을 연장 여기 필드를 초기화

필드 pathField = 새로운 StringField ("경로"file.toString() 필드의 예이다. Store.YES);
doc.add (pathField);

이제 문서를 저장하려면 이렇게해야합니다.

SolrInputDocument doc = new SolrInputDocument();
String id = "1";
문자열 작성자 = "Erick";
String text = "나는 Solr 책을 좋아합니다";
doc.addField ("id", id);
doc.addField ("author", title);
doc.addField ("text", text); Solrj이 link을 되돌리기하시기 바랍니다 사용하여 검색 &을 Indeing SOLR을 undertand에하기 위해

.

이 정보가 도움이되기를 바랍니다.

+0

그는 루씬 클래스 FacetField에 대해 특정 질문을 묻는 데요 - 그것은 SolrJ에 정말 관련이없는 그리고 내가 아는 한 SOLR와 통합? – MatsLindh

+0

감사합니다. 수정 사항을 추가 할 예정입니다. :) –

1

동일한 문제가 발생했습니다. 이 문서를 작성하여 검색으로 얻으려면 FacetField가 실제로 문서의 일부로 저장되지 않는 것을 볼 수 있습니다. 또한 FacetField의 값을 검색해도 작동하지 않습니다 (결과는 0). 필드가 분류와 색인 자체에 쓰여지는 플래그 또는 무언가가 있으면 좋겠지 만 문서 색인에 적용되지 않는 여러 가지 속성이 있다고 생각합니다. 패싯 필드는 혼동을 피하기 위해 별도로 유지합니다.

내가 처리 한 방법은 문서에 필드를 두 번 작성하는 것입니다. 하나는 FacetField로, 다른 하나는 원하는 특성으로 필드를 작성하는 것입니다.

예 :

Document doc = new Document(); 

// Add facet fields, not stored/searchable, but can be drilled down into 
doc.add(new FacetField("Author", "Bob")); 
... 

// Add other fields 
doc.add(new TextField("Author", "Bob", Store.YES)); 
...