"A", "EF" "CDE"와 같은 부분 문자열을 찾은 모든 결과를 얻을 수 있도록 검색 방법은 어떻게합니까? "ABCDEF"Solr - 주어진 문자열의 모든 부분 문자열 검색
일부 문자가 누락 될 수있는 문자열을 검색 할 때 "BDE"와 같은 결과가 나오기 때문에 regex를 사용하는 데 문제가 있습니다.이 경우 "C"를 건너 뛰기가 허용되어 유효하지 않습니다.
"A", "EF" "CDE"와 같은 부분 문자열을 찾은 모든 결과를 얻을 수 있도록 검색 방법은 어떻게합니까? "ABCDEF"Solr - 주어진 문자열의 모든 부분 문자열 검색
일부 문자가 누락 될 수있는 문자열을 검색 할 때 "BDE"와 같은 결과가 나오기 때문에 regex를 사용하는 데 문제가 있습니다.이 경우 "C"를 건너 뛰기가 허용되어 유효하지 않습니다.
텍스트 필드에 대한 분석 체인에서 NGramFilter (토크 나이저가 아님)를 사용할 수 있습니다. 제출 된 텍스트의 각 하위 문자열에 대해 텍스트를 별도의 토큰으로 분할합니다. 하위 문자열의 최소/최대 길이를 제공하여 생성 된 토큰의 길이를 조정할 수 있습니다.
귀하의 의견은 당신이 KeywordTokenizer
사용의 하위 문자열을 검색 할 단지 단일 문자열 인 경우 - 다음 generate the substrings with the NgramFilter에 사용되는 단일 토큰으로이 입력을 유지합니다 문자열 :
<filter class="solr.NGramFilterFactory"/>
기본값은 분에 대한 값/최대는 (예제에서) 제공하는 1, 2 :
귀하의 경우In: "four score"
Tokenizer to Filter: "four", "score"
Out: "f", "o", "u", "r", "fo", "ou", "ur", "s", "c", "o", "r", "e", "sc", "co", "or", "re"
전체 문자열이 하나의 값으로 유지 될 것입니다 당신이 대신 "네 점수"가 줄 수 있도록 토큰을 분리합니다.
위키의 예제에서 1/4 값에 주어진 예제는 현재 잘못되었습니다 (EdgeNGramFilter에서 복사 된 것처럼 보임). 따라서 무시하십시오.
콘텐츠를 쿼리하는 방법에 따라 최소/최대 값을 조정해야합니다. 길이가 3보다 작은 부분 문자열을 쿼리하지 않으려면 3을 최소값으로 사용하십시오.
정말 고마워요. 설명은 매우 도움이됩니다 :) – Pie222
내가 사용 사례에 대한 구체적인 분석 체인을 사용하는 것이 좋습니다 :
<fieldType name="text_ngram" class="solr.TextField">
<analyzer type="index">
...
<filter class="solr.NGramFilterFactory" minGramSize="1" maxGramSize="4"/>
</analyzer>
<analyzer type="query">
<charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt" />
<tokenizer class="solr.StandardTokenizerFactory" />
<filter class="solr.WordDelimiterFilterFactory"
generateWordParts="1" generateNumberParts="1" catenateWords="0"
catenateNumbers="0" catenateAll="0" splitOnCaseChange="1" />
<filter class="solr.LowerCaseFilterFactory" />
</analyzer>
</fieldType>
N.B. 예기치 않은 동작을 원하지 않으면 쿼리 시간에 Ngram 토큰 필터링을하지 마십시오.
[1] https://cwiki.apache.org/confluence/display/solr/Filter+Descriptions#FilterDescriptions-N-GramFilter
검색어를 사용해 보셨습니까? – Mysterion
NGramFilter를 사용해 보셨습니까? – MatsLindh
귀하의 질문은 매우 불분명합니다. 색인을 생성하고 찾으려고하는 텍스트 (ABCDEF)는 무엇입니까? 그리고 검색 문자열 (A, EF 등)은 무엇입니까? –