我正在尝试为每个搜索结果提供90%匹配率(例如90%匹配)。
是否有任何方法可以在python中编写函数或创建一些Javascript代码,这些代码将自动为有序列表(我的搜索结果)中的每个项目分配100%到0%(相反的顺序)的随机值),则根据列表的默认顺序(1,2,3,4 ..)。
唯一的问题是我不知道将显示的确切结果数,因为每个查询都可能不同,并且我将Elasticsearch用作索引。
HTML的简单示例:
<div>
{% if page_obj.object_list %}
<ol class="row top20">
{% for result in page_obj.object_list %}
<li class="list-item">
<div class="showcase col-sm-6 col-md-4">
<a href="{{ result.object.get_absolute_url }}">
<h3>{{result.object.title}}</h3>
<img src="{{ result.object.image }}" class="img-responsive">
</a>
</div>
<li>
{% endfor %}
</ol>
</div>
{% else %}
<p> Sorry, no result found </p>
{% endif %}
现在最终的预期结果应该类似于以下内容:
- Title 1
image...
*100% Match* <-- Random % Value based on the order -->
- Title 2
image...
*92% Match*
- Title 3
image...
*85% Match*
- Title 4
image...
*56% Match*
目前我真的愿意接受任何解决方案。
我该怎么做?
答案 0 :(得分:0)
这是一个简单的函数,具有循环,每次迭代都会在较低范围之间返回一个随机数,直到达到零为止:
const data = [
{ title: "foo" },
{ title: "foo" },
{ title: "foo" },
{ title: "foo" },
{ title: "foo" },
{ title: "foo" },
{ title: "foo" },
{ title: "foo" },
{ title: "foo" },
{ title: "foo" },
{ title: "foo" },
]
let index = 0;
let results = [];
const randomSearchMatchPercentages = ( array ) => {
for ( const element of array ) {
// define a maximum and a minimum range
const maximum = index <= 100 ? 100 - index : 0;
const minimum = maximum > 0 ? maximum - 5 : 0;
element.match = Math.round( Math.random() * ( maximum - minimum ) + minimum ) + "%";
results.push( element );
// decrease the maximum and minimum for the next iteration
index += 5;
}
console.log( results );
}
randomSearchMatchPercentages( data );