Совместим ли Simple Query Search с дранкой?

Мне интересно, можно ли использовать дранку с запросом Simple Query String. Мое сопоставление для соответствующего поля выглядит следующим образом:

{
    "text_2": {
        "type": "string",
        "analyzer": "shingle_analyzer"
    }
}

Анализатор и фильтры определяются следующим образом:

"analyzer": {
    "shingle_analyzer": {
        "type": "custom",
        "tokenizer": "standard",
        "filter": ["standard", "custom_delimiter", "lowercase", "stop", "snowball", "filter_shingle"]
    }
},
"filter": {
    "filter_shingle":{
       "type":"shingle",
       "max_shingle_size":5,
       "min_shingle_size":2,
       "output_unigrams":"true"
    },
    "custom_delimiter": {
        "type": "word_delimiter",
        "preserve_original": True
    }
}

Я выполняю следующий поиск:

{
    "query": {
        "bool": {
            "must": [
                {
                    "simple_query_string": {
                        "analyzer": "shingle_analyzer",
                        "fields": [
                            "text_2"
                        ],
                        "lenient": "false",
                        "default_operator": "and",
                        "query": "porsches small red"
                    }
                }
            ]
        }
    }
}

Теперь у меня есть документ с text_2 = small red porsches, Поскольку я использую оператор AND, я ожидаю, что мой документ не будет совпадать, так как приведенный выше запрос должен привести к появлению фрагмента "porsches small red", что является другим порядком. Однако, когда я смотрю на объяснение матча, я вижу только одно слово "красный", "маленький" "porsche", которое, конечно, соответствует.

Является ли SQS несовместимым с черепицей?

1 ответ

Ответ "Да, но...".

То, что вы видите, нормально, учитывая тот факт, что text_2 Поле, вероятно, содержит стандартный анализатор индекса в вашем отображении (согласно объяснению, которое вы видите), то есть единственные токены, которые были созданы и проиндексированы для small red porsches являются small, red а также porsches,

Что касается запроса, вы, вероятно, используете анализатор output_unigrams установите в значение true (по умолчанию), что означает, что маркеры униграмм также будут создаваться в дополнение к биграммам (опять же, согласно объяснению, которое вы видите). Эти униграммы - единственная причина, почему вы получаете спички вообще. Если вы хотите сопоставить биграммы, то одним из решений является использование анализатора гальки также во время индексации, чтобы биграммы small red а также red porsches может быть произведено и проиндексировано в дополнение к униграмме small, red а также porsches,

Тогда во время запроса, униграммы также будут совпадать, но small red Биграм тоже подойдет. Чтобы соответствовать только на биграммах, у вас может быть другой анализатор гальки только для времени запроса, чье output_unigrams имеет значение false, так что из ваших результатов поиска генерируются только биграммы. И если ваш запрос содержит только одно слово (например, porsches), тогда этот анализатор черепицы будет генерировать только одну униграмму (потому что output_unigrams_if_no_shingles верно), и запрос все равно будет соответствовать вашему документу. Если это не желательно, вы можете просто установить output_unigrams_if_no_shingles в false в вашем поисковом анализаторе.

Другие вопросы по тегам