2013-06-04 6 views
1

하나의 컬렉션에서 30,000 개의 데이터베이스 레코드를 색인화하려고합니다. 하나의 사용자 정의 필드에 항목 목록을 포함 할 수 있어야합니다. 내 수색에서. 애플리케이션 ID 목록을 포함하는 (CF10 도입) 동적 정의 필드 applications_s되어,이 예에서CFSearch solr 사용자 정의 필드의 목록 사용

<cfindex collection = "myCollection" 
      action = "refresh" 
      type = "custom" 
      query = "Local.myQuery" 
      key = "ID" 
      title="Title" 
      applications_s="A_Comma_Separated_List" 
      body = "a_field,a_nother_field"> 

:

여기에 내 인덱스의 일례이다. 이 필드의 내용 예제는 다음과 같습니다

T1,T2,B4,G1 

이 모든 인덱스 화려하게, 그러나 나는 기준으로 응용 프로그램 목록에서 단일 항목을 사용하여 검색하는 방법을 알아낼 수 없었습니다.

<cfsearch name="Local.qSearch" 
    collection="myCollection" 
    criteria="test AND applications_s:T1"> 

이 몸의 단어 '테스트'가 포함 된 모든 레코드를 반환하고, 또한 응용 프로그램 필드에 'T1'을 포함해야한다 :

그래서, 나는이 작업을 수행 할 수 있도록하고 싶습니다 . 그러나 사용자 지정 필드의 내용을 쉼표로 구분 된 목록으로 처리하는 조건 구문을 찾을 수 없습니다 ... 문자열로만 작동하는 것으로 보입니다. 따라서 와일드 카드를 포함하지 않으면 내 예제 레코드가 반환되지 않습니다. 이로 인해 실수로 반환되는 여분의 레코드에 문제가 발생할 수 있습니다.

내 사용자 정의 필드가 목록임을 명시하는 방법이 있습니까? 에 내 지정된 값이 있어야합니까?

+0

필자가 묻는 방식으로'cfindex'를 사용하지 않았다는 말로 내 의견을 시작하겠습니다. [docs here] (http://help.adobe.com/ko_KR/ColdFusion/10.0/CFMLRef/WSc3ff6d0ea77859461172e0811cbec22c24-7d04.html) 몇 가지 질문/의견이 있습니다. 먼저, 커스텀 애트리뷰트에 원하는 이름을 붙이거나 'custom1','custom2','custom3','custom4'가 필요합니까? 두 번째로, 문서는 사용자 정의 속성이 예제와 같이'type = custom'을 지정할 때 쿼리 열 이름을 지정해야한다고 말합니다. 응용 프로그램 ID가 데이터베이스의 열에 포함되어 있습니까? –

+0

Hi Miguel, CF10에서 동적으로 사용자 정의 필드를 추가하고 원하는 이름을 지정할 수 있습니다. 'custom1, custom2'등을 사용하는 것과 동일합니다. 차이가 있다면 customX를 사용하면 기꺼이 사용합니다. 둘째, 응용 프로그램 ID가 데이터베이스 열로 돌아옵니다. cfindex 예제는 정확히 예상대로 작동합니다. 목록으로 취급되는 사용자 정의 열과 일치시킬 수있는 구문을 찾고 싶습니다. –

+0

나는 이것을 간단하게 할 수 없다고 생각하기 시작했습니다. * 사용자 정의 필드를 검색하는 * 정보가 없습니다. 와일드 카드를 사용하여 정확하게 일치하는 항목이나 일치 항목을 찾을 수는 있지만 처음에는 와일드 카드를 사용할 수 없기 때문에 이것은 나에게 거의 쓸모가 없습니다. 이것은 정말로 * 명백한 일처럼하고 싶다. 나는 뭔가를 놓치고 있는가, 아니면 심각하게 지원하지 않는가? ?? –

답변

2

CF9.0.1에서 다음 작업을 할 수있었습니다. MYCUSTOMNAME_TYPE (예 : applications_s) 필드는 CF10 전용이지만 custom1 필드를 사용하여 컬렉션의 schema.xml을 편집하고 Solr을 다시 시작하여 '문자열'유형으로 지정할 수있었습니다. CF10을 사용할 필요가 없습니다.

1) 색인하고있는 쿼리에서, 그래서 예를 들어 행이 보일 것이다, 마지막에 ONE을 응용 프로그램 목록 컬럼의 시작 부분에 쉼표를 추가하고, 같은 :

,,T1,T1B,T2,B4,G1, 

연결 (선호)을 사용하여 SQL에서이를 수행하거나 Query-of-Queries 또는 QueryNew()를 사용하여 쿼리 결과를 사후 처리하고 쿼리를 반복하여 복사본을 빌드 할 수 있습니다.

2) 색인 필드를 확인하기 위해 applications_s를 사용하여 문제로 cfindex와 쿼리는 문자열 형식이 아닌 텍스트입니다. 우리는 목록을 단어로 "토큰 화"하고 싶지 않습니다. 쉼표는 매우 중요하며 무시하지 않아야합니다. 당신의 cfsearch 패드 기준에

3) 다음과 같이

<cfset searchString= "test"> 
<cfset applicationFilter = "T1"> 
<cfsearch name="Local.qSearch" 
    collection="myCollection" 
    criteria="#searchString# AND applications_s:,*,#applicationFilter#,*"> 

주 3 개 쉼표 모두 2 와일드 카드 별표있다. 와일드 카드를 사용하여 Solr 쿼리를 시작할 수 없기 때문에 첫 번째 쉼표가 있습니다. 두 번째와 세 번째 쉼표는 T1에 대한 와일드 카드 검색이 T1B와 일치하지 않도록합니다.

+0

Ooooh ... 생각이 들었습니다. 그래서 와일드 카드 제한을 피하기 위해 추가 쉼표를 추가 한 다음 검색에 구분 기호를 포함시키는 것만으로도 효과가있을 것 같습니다. 나는 다음 주까지 그걸 시험 할 기회를 얻지 못할 것이다. 그러나 나는 너에게 알릴 것이다. –

+0

예, 해킹이지만 CF9에서 작동하는 것 같습니다. CF10에 접속할 수는 없지만 저희에게 알려주십시오. 필드 유형이 "문자열"이고 "텍스트"가 아닌 것이 중요합니다. "텍스트"이면 모든 구분 기호가 무시되는 반면 일치하는 항목이 정확한지 확인해야합니다. – CfSimplicity

+0

CF10에서도 잘 작동합니다. 도와 주셔서 감사합니다! 제쳐두고, 특수 문자 또는 null이 포함 된 값을 사용자 정의 필드에 삽입 할 때 문제가 발생했습니다. 이 오류는 기분 나쁜 행에 대해 어떤 정보도 제공하지 않지만 사용자 정의 필드는 상당히 심하게 위생적이어야한다는 것을 명심하십시오. –