Точный поиск получает меньший приоритет, чем поиск по телефону c? - PullRequest
0 голосов
/ 12 апреля 2020

У меня есть индексasticsearch, и я использую следующий запрос:

    "_source": [
        "title", 
        "content"

    ],
    "size": 15,
    "from": 0,
    "query": {
        "bool": {
            "must": {
                "multi_match": {
                    "query": "{{query}}",
                    "fields": [
                        "title",
                        "content"
                    ],
                    "operator": "or"
                }
            },
            "should": [
                {
                    "multi_match": {
                        "query": "{{query}}",
                        "fields": [
                            "title.standard^16",
                            "content.standard^2"
                        ],
                        "operator": "and"
                    }
                },
                {
                    "match_phrase": {
                        "content.standard": {
                            "query": "{{query}}",
                            "_name": "Phrase on title",
                            "boost": 1000
                        }
                    }
                }
            ]
        }
    },
    "highlight": {

        "fields": {
            "content": {}
        },
        "fragment_size": 100
    }
}

Вот отображение, которое я установил:

{
    "settings": {
        "index": {
            "analysis": {
                "analyzer": {
                    "my_analyzer": {
                        "tokenizer": "standard",
                        "filter": [
                            "lowercase",
                            "my_metaphone"
                        ]
                    }
                },
                "filter": {
                    "my_metaphone": {
                        "type": "phonetic",
                        "encoder": "metaphone",
                        "replace": true
                    }
                }
            }
        }
    },
    "mappings": {
        "properties": {
            "title": {
                "type": "text",
                "term_vector": "with_positions_offsets",
                "analyzer": "my_analyzer",
                "fields": {
                    "standard": {
                        "type": "text"
                    }, 
                    "stemmer": {
                        "type": "text", 
                        "analyzer": "english"  
                    }
                }
            },
            "content": {
                "type": "text",
                "term_vector": "with_positions_offsets",
                "analyzer": "my_analyzer",
                "fields": {
                    "standard": {
                        "type": "text"
                    }, 
                    "stemmer": {
                        "type": "text", 
                        "analyzer": "english"  
                    }
                }
            }
        }
    }
}

Вот мои логики c с запросом :

1) Это даст наивысший приоритет фразе, если она появится.

2) Если нет, он будет использовать стандартный анализатор (то есть текст, как есть) и присвоит ему наивысший приоритет.

3) Если все остальное не совпадает, он использует анализатор phoneti c для получения результатов, что является наименьшим приоритетом.

Но, очевидно, в этом есть какая-то ошибка, так как он, похоже, отдает приоритет анализатору phoneti c, чем стандарту или фразе. Например, если я ищу «Человек индийского происхождения», он возвращает результаты вверху, выделяя «Преследующий» «преследуя» и очень, очень меньшее количество результатов с человеком индийского происхождения, хотя я знаю, что существует большое их количество. Как мне это решить?

...