Подсветка фразы с помощью defType = complexphrase - PullRequest
0 голосов
/ 28 апреля 2020

Используя Solr 8.5, схему. xml:

<schema name="test" version="1.5">
    <fields>
        <field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false"/>
        <field name="_version_" type="long" indexed="true" stored="true"/>

        <field name="text_syntax" type="text_tokenized_wildcard" indexed="true" stored="true" multiValued="false" required="true"/>
        <field name="corpus" type="string" stored="true" indexed="true" multiValued="false" required="true"/>

        <field name="event_timestamp" type="timestamp" stored="true" indexed="true" multiValued="false" required="false"/>
        <copyField source="text" dest="text_syntax"/>
    </fields>

    <uniqueKey>id</uniqueKey>

    <types>
        <fieldType name="text_tokenized_wildcard" class="solr.TextField" positionIncrementGap="100">
            <analyzer type="index">
                <tokenizer class="com.solr.custom.tokenizer.SentenceSearchTokenizerFactory"/>
                <filter class="solr.LowerCaseFilterFactory"/>
                <filter class="solr.PatternReplaceFilterFactory" pattern="ё" replacement="е"/>
                <filter class="solr.ReversedWildcardFilterFactory" withOriginal="true" />
            </analyzer>
            <analyzer type="query">
                <tokenizer class="com.solr.custom.tokenizer.SentenceSearchTokenizerFactory"/>
                <filter class="solr.LowerCaseFilterFactory"/>
                <filter class="solr.PatternReplaceFilterFactory" pattern="ё" replacement="е"/>
            </analyzer>
        </fieldType>
        <fieldType name="string" class="solr.StrField" sortMissingLast="true" />
        <fieldType name="long" class="solr.LongPointField"/>
        <fieldType name="timestamp" class="solr.DatePointField"/>
    </types>

</schema>

Мне нужно искать фразы с синтаксисом (например, q = "* do stuff" должен выдавать "undo stuff", "redo stuff", "do stuff" et c), поэтому я использую defType = complexphrase .

http://localhost:8983/solr/test/select?fl=id corpus score&hl=on&hl.fl=text_syntax&df=text_syntax&defType=complexphrase&hl.snippets=32767&hl.maxAnalyzedChars=5000000&rows=30&inOrder=false&q="*do something"~1&hl.method=unified&hl.fragsize=100

Это дает хорошие результаты, однако каждое слово в ответе выделяется отдельно:

<em>do</em> <em>stuff</em>
<em>undo</em> <em>stuff</em>
...

Я бы хотел, чтобы фразы выделялись

<em>do stuff</em>
<em>undo stuff</em>

Я пытался:

  1. hl.method = unified - не работает, если только defType = edismax / dismax / standart, но эти парсеры мне не подходят
  2. hl.method = original , hl.mergeContiguous = true - тоже не Работа. Более того, hl.fragsize не работает должным образом (любое значение дает гигантские фрагменты)
  3. hl.method = fastVector - не работает

Any была бы признательна за помощь.

...