Использование Solr 8.1.1 (работает в облачном режиме).
Я не могу заставить PreAnalyzedField
, в частности, тот, у которого JsonPreAnalyzedParser
, работать полностью.
После: https://lucene.apache.org/solr/guide/8_2/working-with-external-files-and-processes.html#the-preanalyzedfield-type
Определение моего поля и типа:
<fieldType name="preanalyzed" class="solr.PreAnalyzedField" parserImpl="org.apache.solr.schema.JsonPreAnalyzedParser">
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
<field name="pre" type="preanalyzed" indexed="true" termOffsets="true"
stored="true" termPositions="true" termVectors="true" multiValued="false"/>
Я добавляю тестовый документ, подобный следующему:
<doc>
<field name="document_id">json_doc</field>
<field name="author">XML AUTHOR</field>
<field name="pre">{
"v": "1",
str: "This is two sentences"
"tokens": [
{"t": "This", "s": 0, "e": 4, "y": "word"},
{"t": "two", "s": 8, "e": 11, "y": "word"}]
}</field>
</doc>
Я хотел бы получить pre.tokens
массив в ответе на запрос.
Когда я запрашиваю "все"
/select?q=*:*
{"numFound":1,"start":0,"docs":[
{
"document_id":"json_doc",
"author":["XML AUTHOR"],
"pre":"This is two sentences",
"_version_":1649822942659346432}]
}
Массив tokens
отсутствует в pre.
Я знаю, что эти токены каким-то образом сохраняются (поэтому индексация документов работает) - потому что, когда я запрашиваю с выделением на pre
:
{
"params":{
"q":"pre:two",
"hl":"on",
"hl.fl":"pre"
},
"response":{"numFound":1,"start":0,"docs":[
{
"document_id":"json_doc",
"author":["XML AUTHOR"],
"pre":"This is two sentences",
"_version_":1649822942659346432}]
},
"highlighting":{
"json_doc":{
"pre":["This is <em>two</em> sentences"]
}
}
}
Как получитьмассив токенов, возвращенный в запросе?
Моей конечной целью является создание NER на поле с использованием spacy и сохранение аннотаций в SOLR, чтобы я мог запросить что-то вроде q=document_content:(Person:Paris Hilton)
который будет возвращать документы, содержащие сущности типа: Person (поле y
в токенах) и имя "Paris Hilton".
RealЯ хотел бы сделать что-то вроде того, что, как мне кажется, происходит здесь, в этом плагине "mapper annotated text" в Elastic Search: https://www.elastic.co/blog/search-for-things-not-strings-with-the-annotated-text-plugin
Я прочитал все заявки в SOLR и некоторые Java, относящиеся к PreAnalyzedFields:Это было особенно интересно: https://issues.apache.org/jira/browse/SOLR-11764
Может быть, я должен использовать это? https://lucene.apache.org/solr/8_2_0//solr-core/org/apache/solr/update/processor/PreAnalyzedUpdateProcessorFactory.html