2012-08-27 2 views
1

Solr은 Lucene의 전체 텍스트 검색을 사용합니다. 모든 것을 텍스트로 변환해야한다는 의미입니까?전체 텍스트 검색은 모든 것을 텍스트로 변환하는 것을 의미합니까?

<doc> 
     <field name="id">1</field> 
     <field name="rollno">32</field> 
     <field name="name">John Milton</field> 
</doc> 

,

<field name="rollno" type="int" indexed="true" stored="true"/> 
    <field name="name" type="string" indexed="true" stored="true"/> 

그리고이 fileds을 기반으로 문서 그리고는 다음과 같이 텍스트로 모두 변환 할 수 있습니다 : 예를 들어 , 내가 좋아하는 fileds 있나요?

<copyField source="name" dest="text"/> 
<copyField source="rollno" dest="text"/> 

그리고 같은 내 검색 처리기,

<requestHandler name="/select" class="solr.SearchHandler"> 
    <lst name="defaults"> 
     <str name="echoParams">explicit</str> 
     <int name="rows">100</int> 
     <str name="df">text</str> 
    </lst> 
</requestHandler> 

내 의심을 명확히하십시오.

답변

0

schema.xml 파일에서 fieldName이 설정되지 않은 경우 쿼리를 검색하는 데 사용되는 defaultSearchField을 설정합니다.

<defaultSearchField>text</defaultSearchField> 

RequestHandler를 df의 매개 변수는 유사한 목적을 위해 사용된다. schema.xml 파일에 정의 된 기본 필드를 겹쳐 9니다.

copyField을 사용하여이 매개 변수에 여러 필드를 추가하면 유형에 관계없이 모든 필드를 검색 할 수 있습니다.

따라서 다음과 같이 쿼리를 만들면 기본 필드를 검색합니다.

http://localhost:8080/solr/select/?q=searchText 

특정 필드에서 검색하려면 다음과 같이 쿼리를 만들어야합니다. 다음 쿼리는 rollno 필드를 검색합니다.

http://localhost:8080/solr/select/?q=rollno:32 
1

모든 것을 텍스트로 변환 할 필요는 없습니다.

필드의 내용에 따라 다릅니다.
일반적으로 내용이 많은 필드에는 텍스트 필드 유형을 사용합니다.
With text field you can a lot handling to make the content searchable.
예 :
- 소문자 필터를 적용하여 대소 문자를 구분하지 않아도됩니다. - 차량, 자동차 등의 동의어를 표시 할 수있는 동의어를 적용 할 수 있습니다.
- 단어를 뿌리로 검색 할 수 있도록 스테이밍을 적용 할 수 있습니다. 은행 은행 등
- & t과 AT & T는 등 ...

에서 당신은 일반적으로 같은 anaylsis을하지 않으과 더 많은 단어 구분 기호는 모든 분야에 적용 할 수 있습니다.
예 : 스템 머가 사람 이름이나 저자 이름에 적용되는 것을 원하지 않습니다. 일치하지 않을 수 있습니다.

정수와 문자열 인 필드의 경우 색인 필드가 있으면 텍스트로 표시하지 않고 검색 할 수 있습니다.

복사본 필드는 모든 콘텐츠를 단일 필드 유형의 필드에 복사해야합니다.
복사 필드를 사용하지 않으려면 edismax 파서를 사용하고 여러 필드에서 계속 검색 할 수 있습니다.

<requestHandler name="standard" class="solr.SearchHandler" default="true"> 
    <lst name="defaults"> 
     <str name="defType">edismax</str> 
     <str name="echoParams">explicit</str> 
     <str name="qf">rollno name</str> 
     <str name="q.alt">*:*</str> 
    </lst> 
</requestHandler> 
0

이 오류가 발생했습니다. copyField는 텍스트로 변환하지 않습니다. name이라는 필드의 값을 text라는 필드로 복사합니다. 이것은 일반적으로 모든 값을 포함하는 필드를 가지는 데 사용됩니다. 이 필드는 일반적으로 기본 검색 필드입니다. 이유가 무엇인지 설명해 드리겠습니다.

위의 2 개 필드를 게시 한 경우 어느 것이 기본 검색 필드인지 신고해야합니다. 이름을 말하게합니다. 이제 쿼리 구문없이 일반 식을 사용하여 서버를 쿼리하면 필드 이름 만 검색됩니다. 그러나 일반적으로 검색 할 필드 롤오프를 갖기를 원합니다. 쿼리 구문없이이 작업을 수행하려면 다른 필드 (이 경우 text라는 이름)를 선언하십시오. 이제 필드 이름과 필드 rollno의 값을 필드 텍스트에 복사하고 기본 검색 필드로 정의합니다. John Milton 또는 42를 검색하면 문서가 발견됩니다. 바라기를 이것은 당신을 조금 도울 수 있습니다.

관련 문제