2014-09-08 5 views
-2

나는 줄기가있는 입력란에 정확히 일치하는 것을 원합니다. "직장에서 베이비 시터를"keywordTokenizer 및 형태소 분석 필터를 사용하는 입력란에서 정확한 검색을 수행하는 방법

<fieldType name="string_ci_stem" class="solr.TextField" sortMissingLast="true" omitNorms="true"> 
     <analyzer type="index"> 
      <tokenizer class="solr.KeywordTokenizerFactory"/>   
      <filter class="solr.LowerCaseFilterFactory" /> 
      <filter class="solr.SnowballPorterFilterFactory"/> 
     </analyzer> 
     <analyzer type="query"> 
      <tokenizer class="solr.KeywordTokenizerFactory"/> 
      <filter class="solr.LowerCaseFilterFactory" /> 
      <filter class="solr.SnowballPorterFilterFactory"/> 
     </analyzer> 

색인하기 문서 대신 "직장에서 보아"의 "직장에서 베이비 시터"입니다 - : Eg.My 데이터는이 값을 가지고있다. 나는 그 solr가 keywordTokenizer가 사용될 때 문장의 마지막 단어를 줄이는 것을 보았다.

"직장에서 보아"- - 반환 결과 을 "일을 보아"- doesnot 반환 결과 :

이는, "직장에서 보아"것과 같은 인덱스 "직장에서 베이비 시터"하는 방법입니다.

결과를 얻는 데 도움이되는 다른 schema.xml 정의는 무엇입니까?

도움이 될 것입니다.

편집 : 질문이 업데이트되었습니다.

+0

문제를 이해하기는 어렵지만 불용어와 관련이 있으며 형태소 분석과 관련이없는 것으로 보입니다. – nomoa

+0

@nomoa - 그냥 질문을 편집, 내가 잘못 입력했습니다. 혼란을 드려 죄송합니다. 실제로는 불용어와 관련이 없습니다. 사용하지 않기 때문입니다. –

+0

OK, IIRC KeywordTokenizer는 전체 입력과 함께 하나의 토큰을 방출하므로 "Babysitters at work"는 단일 토큰 "babysitters at work"로 인덱싱됩니다. 공백이나 다른 것들을 토큰 화하는 StandardAnalyzer를 사용해야합니다. https://cwiki.apache.org/confluence/display/solr/ 토큰 도구 – nomoa

답변

0

KeywordTokenizerFactory는 "Babysitters"at ""work "와 같은 토큰으로 입력 텍스트를 분할하여 전체 입력을 인덱싱하므로 사용자의 용도로 설계되지 않았습니다. solr.KeywordTokenizerFactory 대신에 solr.StandardTokenizerFactory로 원하는 것을 얻을 수 있습니다. 여기에 대한 자세한 정보 : https://cwiki.apache.org/confluence/display/solr/Tokenizers

그런 다음 단일 용어 쿼리를 수행하려면 방출 된 토큰을 하나로 연결해야합니다. 나는 필터의 종류 SOLR에서 사용할 수 있는지 알고하지 않습니다하지만이 스레드에 따라 직접 만들 꽤 쉽게해야합니다 : 직장에서 http://elasticsearch-users.115913.n3.nabble.com/Is-there-a-concatenation-filter-td3711094.html

  1. 베이비 시터 -> StandardTokenizer -> "베이비 시터" "에서" "작업" "에서"작업 "
  2. "베이비 시터 "는"- 형태소 분석> -> "보아" ""작업 "
  3. " "작업" "에서"보아 ""에 -> 귀하 연결하여 필터 -> "보아 직장에서 "
+0

StandardTokenizerFactory를 사용하여 정확한 키워드 일치를 얻는 방법 대신 구문 검색이 될 것으로 믿습니다. 예 : : - "직장에서 베이비시 트"를 검색하면 "보스톤에서 근무하는 배트 피트"와 같은 색인 된 데이터가 반환되지 않아야합니다. StandardizedTokenizer가 이러한 데이터를 반환하고 있습니다. –

+0

글쎄, 네가 그럴 수 없다고 생각해. 가장 일치하는 부분은 구문 검색입니다. StandardTokenizer를 사용하면 분석 마지막에 모든 토큰을 하나로 연결하는 최종 연결 필터를 구현할 수 있습니다. http://elasticsearch-users.115913.n3.nabble.com/Is-there-a-concatenation-filter-td3711094.html – nomoa

+0

감사합니다 노모 :) 이것을 시도해보십시오. –