2015-01-18 5 views
0

전자 상거래 웹 사이트에 대한 제품 검색 엔진을 구축 중입니다.전자 상거래 제품 검색 : 공백 여부

문서가 이기종 소스에서 제공되므로 지금은 수정할 수 없습니다. 이와 같은

GO-PRO BATTERY 1000 
GO-PRO BATTERY 2000 

그리고 마지막으로 다른 사람 :

GOPRO CAMERA 32 
GOPRO CAMERA 35 

일부이 같은 다른 사람 : 설명 필드

GO PRO CASE SLIM BLUE 
GO PRO CASE SLIM RED 
GO PRO CASE SLIM GREEN 

내 필드 유형

나는이 같은 일부 문서의 설명이 'text_it':

<fieldType name="text_it" class="solr.TextField" positionIncrementGap="100"> 
      <analyzer type="index"> 
       <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
       <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/> 
       <filter class="solr.ElisionFilterFactory" ignoreCase="true" articles="lang/contractions_it.txt"/> 
       <filter class="solr.LowerCaseFilterFactory"/> 
       <filter class="solr.ASCIIFoldingFilterFactory"/> 
       <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_it.txt" format="snowball" /> 
       <filter class="solr.ItalianLightStemFilterFactory"/> 
      </analyzer> 
      <analyzer type="query"> 
       <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
       <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/> 
       <filter class="solr.ElisionFilterFactory" ignoreCase="true" articles="lang/contractions_it.txt"/> 
       <filter class="solr.LowerCaseFilterFactory"/> 
       <filter class="solr.ASCIIFoldingFilterFactory"/> 
       <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_it.txt" format="snowball" /> 
       <filter class="solr.ItalianLightStemFilterFactory"/> 
       <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>x 
      </analyzer> 
     </fieldType> 

분명히 GO PRO과 같은 쿼리를 제출할 때 위에 나열된 세 그룹 각각의 결과가 표시됩니다.

내가 대신 검색 할 때 GOPRO 그냥 처음 두 그룹의 검색 결과가 있습니다. 무엇

GOPRO => GOPRO GOPRO => GOPRO, 이동 프로 GO의 => 가고 PRO, 프로

: 그 이유는 인덱스 토큰이 있다는 분석 양식을 알고 gopro (공백없이) GO PRO 제품 (공백 포함)과 일치하는 쿼리를 제안 했습니까?

UPDATE

내가, 내 쿼리 분석기이 추가 시도 LowerCaseFilter 후 :

<filter class="solr.EdgeNGramFilterFactory" minGramSize="1" maxGramSize="50" side="front" /> 
... 그리고 내 사용 사례에 대해 작동합니다 쿼리 "GOPRO는"g를 생성 , go, gop, gopr, gopro 토큰과 여기 있습니다. 좋아,하지만 이제는 다른 모든 쿼리 결과가 망가졌습니다! "es"토큰이 생성되어 "필수"쿼리의 첫 번째 결과는 "dvd player es-124"입니다.

답변

0

문서의 모든 단어에 적용되는 일반적인 토크 나이저로 흥미로운 곳이 없을 것이라고 생각합니다. 어떤 해결책을 시도해도 "특별한"토큰 화 모든 것에 적용됩니다 (귀하의 경우 gopro와 같이 관심이있는 단어뿐만 아니라).

대신에 나는 당신이 당신의 브랜드를 개별적으로보고 다른 모든 철자의 목록을 만들어야한다고 말하고 싶습니다. 예를 들어, gopro, go pro. 그런 다음 SynonymFilterFactory를 사용 - 공식 문서가 작업을 수행하는 방법에 대한 명확하고 관련 예를 제공합니다

http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters#solr.SynonymFilterFactory

+0

무엇 "대상 포진"을 만들기에 대해? "go pro camera"=> "gopro", "procamera"+ 원본? –

+0

같은 문제; 매우 특정한 단어 목록 (브랜드 이름 - 예를 들어 "슬로우 모션 카메라"를 묶을 일반 토큰 화 프로그램을 원하지 않을 것입니다)에 대해서만 그렇게하기를 원할 것입니다. 그래서 여러분은 수작업으로 큐리스트로 가야합니다 동의어들.귀하의 예제에서 동의어 목록에 두 줄이 필요하다고 생각합니다. 한 줄은 고 프로 (gopro) 용이고, 한 줄은 고 프로 (gopro) 카메라 용입니다. 검색 용 카메라를 식별해야합니다. – Yann

+0

무엇을 했습니까? 도움이 되었다면 대답을 받아주세요 :) – Yann

관련 문제