2013-07-17 5 views
2

사용자 지정 Solr 구성 요소를 쓰고 있습니다. 구성 요소 코드에서 불용어 목록을 사용해야합니다. 내가 할 수있는 구성 요소 코드에 하드 코딩 스톱 워드리스트 :Solr 구성 요소 코드에서 정지 단어 목록에 액세스

Set<String> stopwords = new HashSet<String>(); 
stopwords.add("a"); 
stopwords.add("the"); 
... 

물론, 대신 하드 코딩 스톱 워드리스트를, 나는이 중지 단어의 Set<String>를 초기화 할 수있는 스톱 워드 파일을 사용하여 선호합니다. 나는 스톱 워드 파일을 만들었습니다. 내 질문은 다음과 같습니다.

  1. 파일을 어디에 넣어야합니까? (stopwords.txt 파일을 포함하는 여러 위치를 찾았습니다.
  2. Set<String>의 단어를 파일의 용어로 초기화하는 방법은 무엇입니까? 특히, Solr은 파일에 저장되는 정지 단어를 얻을 수있는 메커니즘을 제공합니까? Set<String> 또는 List<String>?
+0

에 정의되어'how'는 많은 것을 의미 할 수있다 ... 당신이 정교한 수 있을까? – zEro

+0

@zEro : 설명을 추가했습니다. 즉, 내가 파일을 열어 읽어야하는 해결책이 내가 찾는 것이 아니다. – snakile

답변

3

당신은 당신의 구성 요소를 만들 필요로 ResourceLoaderAware.
ResourceLoaderAwareResourceLoader의 인스턴스와 당신에게 inform 방법을 제공 할 것이다 당신은 파일을로드하고 읽을 수 있습니다.
파일을 conf 디렉토리에 호스트되어야합니다. 아마.

SynonymFilterFactory.java 동의어에서 코드가 속성이의 schema.xml 이러한 맥락에서

protected Iterable<String> loadRules(String synonyms, ResourceLoader loader) { 
    List<String> wlist=null; 
    try { 
     File synonymFile = new File(synonyms); 
     if (synonymFile.exists()) { 
     wlist = loader.getLines(synonyms); 
     } else { 
     List<String> files = StrUtils.splitFileNames(synonyms); 
     wlist = new ArrayList<String>(); 
     for (String file : files) { 
      List<String> lines = loader.getLines(file.trim()); 
      wlist.addAll(lines); 
     } 
     } 
    } catch (IOException e) { 
     throw new RuntimeException(e); 
    } 
    return wlist; 
}