Разобрать данные json для тега <highlighting>, чтобы выделить текст в поле - PullRequest
0 голосов
/ 23 июня 2011
{
    "responseHeader": {
        "status": 0,
        "QTime": 32
    },
    "response": {
        "numFound": 21,
        "start": 0,
        "docs": [
            {
                "description": "The matte finish waves on this wedding band contrast with the high polish borders. This sharp and elegant design was finely crafted in Japan.",
                "UID_PK": "8252",

            },
            {
                "description": "This elegant ring has an Akoya cultured pearl with a band of bezel-set round diamonds making it perfect for her to wear to work or the night out.",
                "UID_PK": "8142",

            },

        ]
    },
    "highlighting": {
        "8252": {
            "description": [
                " and <em>elegant</em> design was finely crafted in Japan."
            ]
        },
        "8142": {
            "description": [
                "This <em>elegant</em> ring has an Akoya cultured pearl with a band of bezel-set round diamonds making"
            ]
        },

    }
}

Это данные JSON, которые я получил от solr, когда установил hl=true и hl.fl=description. Здесь я получил тег docs и тег highlighting. Мне нужно проанализировать тег highlighting, чтобы выделить «элегантный» в поле описания, которое находится в теге <em> ... еще одна вещь - UID_PK's(8252,8142) в <highlighting> генерируется динамически каждый раз. Подскажите, пожалуйста, как мне это сделать, если я получаю данные JSON как

$.getJSON("http://192.168.1.9:8983/solr/db/select/?wt=json&&start=0&rows=20&q="+newquery+"&sort=price asc&hl=true&hl.fl=description&hl.usePhraseHighlighter=true&json.wrf=?", function(newresult){

и синтаксический анализ

$.each(newresult.response.docs, function(i,item){

и

 $.each(newresult.highlighting, function(i,hitem){

1 Ответ

1 голос
/ 23 июня 2011

Предполагая, что ответ всегда является текстовым, и только теги, которые должны быть выделены, заключены в теги <em>, и есть только один из них, вы можете сделать это:

var highlight = {};

$.each(newresult.highlighting, function(i, hitem){
    var match = hitem.description[0].match(/<em>(.*?)<\/em>/);
    highlight[i] = match[1];
});

$.each(newresult.response.docs, function(i, item){
    var word = highlight[item["UID_PK"]];
    var result = item.description.replace(new RegExp(word, 'g'), '<em>' + word + '</em>');
    // do something with the result
});

Это работает, только если word не содержит никаких специальных символов регулярного выражения (, в этом случае вам придется их избегать ).Если вы знаете, что выделенное слово встречается в результатах поиска только один раз, вам не нужно использовать регулярное выражение:

item.description.replace(word, '<em>' + word + '</em>');

DEMO

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...