Пример #1
0
        private string BuildSearchIndex(IList <SearchIndexItem> searchIndexItems, string[] stopwords, IExecutionContext context)
        {
            StringBuilder sb = new StringBuilder();

            for (int i = 0; i < searchIndexItems.Count(); ++i)
            {
                SearchIndexItem itm = searchIndexItems.ElementAt(i);
                sb.AppendLine($@"a({{
id:{i},
title:{CleanString(itm.Title, stopwords)},
content:{CleanString(itm.Content, stopwords)},
description:{CleanString(itm.Description, stopwords)},
tags:'{itm.Tags}'
}});");
            }

            foreach (SearchIndexItem itm in searchIndexItems)
            {
                sb.AppendLine($@"y({{
url:'{context.GetLink(new FilePath(itm.Url), true)}',
title:{ToJsonString(itm.Title)},
description:{ToJsonString(itm.Description)}
}});");
            }

            return(CreateJs(sb.ToString()));
        }
Пример #2
0
        private StringBuilder BuildScript(IList <SearchIndexItem> searchIndexItems, string[] stopwords, IExecutionContext context)
        {
            StringBuilder scriptBuilder = new StringBuilder($@"
var searchModule = function() {{
    var idMap = [];
    function y(e) {{ 
        idMap.push(e); 
    }}
    var idx = lunr(function() {{
        this.field('title', {{ boost: 10 }});
        this.field('content');
        this.field('description', {{ boost: 5 }});
        this.field('tags', {{ boost: 50 }});
        this.ref('id');

        this.pipeline.remove(lunr.stopWordFilter);
        {(_enableStemming ? "" : "this.pipeline.remove(lunr.stemmer);")}
    }});
    function a(e) {{ 
        idx.add(e); 
    }}
");

            for (int i = 0; i < searchIndexItems.Count; ++i)
            {
                SearchIndexItem itm = searchIndexItems.ElementAt(i);
                scriptBuilder.AppendLine($@"
    a({{
        id:{i},
        title:{CleanString(itm.Title, stopwords)},
        content:{CleanString(itm.Content, stopwords)},
        description:{CleanString(itm.Description, stopwords)},
        tags:'{itm.Tags}'
    }});");
            }

            foreach (SearchIndexItem itm in searchIndexItems)
            {
                scriptBuilder.AppendLine($@"
    y({{
        url:'{context.GetLink(new FilePath(itm.Url), _includeHost)}',
        title:{ToJsonString(itm.Title)},
        description:{ToJsonString(itm.Description)}
    }});");
            }

            scriptBuilder.AppendLine($@"
    return {{
        search: function(q) {{
            return idx.search(q).map(function(i) {{
                return idMap[i.ref];
            }});
        }}
    }};
}}();");

            return(scriptBuilder);
        }