Tôi có một cấu trúc Solr khá đơn giản, đó là giữ ba lĩnh vực khác nhau:Làm thế nào để sử dụng Solr copyField chỉ
id, văn bản và các thẻ
trong schema.xml
tôi đặt sau
<uniqueKey>id</uniqueKey>
<defaultSearchField>text</defaultSearchField>
<solrQueryParser defaultOperator="AND"/>
<copyField source="tags" dest="text"/>
Tuy nhiên, khi tôi tìm kiếm một từ chỉ xuất hiện dưới dạng thẻ, thì không tìm thấy tài liệu.
Câu hỏi của tôi ở đây là: copyField có xảy ra trước khi bất kỳ trình phân tích nào chạy (chỉ mục và truy vấn) như được mô tả here hoặc ngay trước bộ phân tích truy vấn?
EDIT
máy phân tích def:
<fieldType name="text" 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" preserveOriginal="1" />
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
<filter class="solr.LowerCaseFilterFactory" />
<filter class="solr.SnowballPorterFilterFactory" language="German" />
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1" preserveOriginal="1" />
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
<filter class="solr.LowerCaseFilterFactory" />
<filter class="solr.SnowballPorterFilterFactory" language="German" />
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
</analyzer>
</fieldType>
và các định nghĩa lĩnh vực loại (họ có khá nhiều như configs mặc định):
<fieldType name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true"/>
<fieldType name="int" class="solr.TrieIntField" precisionStep="0" omitNorms="true" positionIncrementGap="0"/>
và định nghĩa trường cuối cùng:
<fields>
<field name="id" type="string" indexed="true" stored="true" required="true" />
<field name="text" type="text" indexed="true" stored="false" multiValued="true" />
<field name="tags" type="text" indexed="false" stored="false" />
</fields>
<uniqueKey>id</uniqueKey>
<defaultSearchField>text</defaultSearchField>
<solrQueryParser defaultOperator="AND"/>
<copyField source="tags" dest="text"/>
Hãy cẩn thận với defaultSearchField: "Tốt hơn là không sử dụng hoặc dựa vào cài đặt này, thay vào đó trình xử lý yêu cầu hoặc truy vấn LocalParams cho tìm kiếm phải chỉ định (các) trường mặc định để tìm kiếm. Cài đặt này ở đây có thể bị bỏ qua và nó đang được xem xét cho sự phản đối. " Từ tài liệu: https://wiki.apache.org/solr/SchemaXml#The_Default_Search_Field – Erowlin